有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java数组项目似乎只打印空值

程序应该为studentArr数组中的Student对象分配随机值。 现在它只打印空值。我试过几种不同的打印方法

我很确定我的方法(应该填写每个学生对象的属性)或者我的print语句有问题

import java.util.*;
public class Lab6Excercise
{
    String[] first={"Rick","Morty","Moriarty","Samus","Promethius","Geiger","Moriarti","Bob","Taco",
            "Asparagus","Shoes","Potato","Dirty","Dan","Spongebob","Space","Nova","Illadin","Orange","Electron"};

    String[] last={"PoopyButthole","Red","Mantis","Toboggan","Oak","Elm","Dumbledore","Potter","Spice","Toothbrush","Argon",
            "Blitz","LazerWolf","Mc-BigMac","King","Queen","Spork","Petrolium","Apple","Trash"};

    //no syntax errors if set to static, but prints out null for everything.
    //problem here or in calling array to print?

    public static Student[] studentArr= new Student[20];
    public Lab6Excercise(){
        initializeArray();
    }

    public void initializeArray(){
        for(int i=0; i>20; i++){
            //this one seems correct but it cant find the symbol method- setStudentID etc. methods
            // online it said to try (Student)studentArr.setStudentID(id())
            //which explicitely casts it

            //seems to work
            //http://stackoverflow.com/questions/29328569/setting-values-to-an-array-of-objects
            studentArr[i]= new Student();
            studentArr[i].setStudentID(id());
            studentArr[i].setFirstName(First());
            studentArr[i].setLastName(Last());
            studentArr[i].setGrade(Grades());

            //other way?probably wrong
            //studentArr[i]= new Student(studentArr.id(),
            //studentArr.First(),
            //studentArr.Last(),
            //studentArr.Grades());
        }
    }

    public Student[] getStudentArr(){
        return studentArr;
    }
    //do i even need this?
    //public Lab6Excercise getLab(){
    //    return lab;
    //}
    public static void main(String[] args){
        //randomly generate double grade, student id;
        //create 2 arrays, first name, last name. pull randomly for name generation

        //necessary? how do i 
        Lab6Excercise lab= new Lab6Excercise();

        //prints out hash or something
        //System.out.println(lab.studentArr.toString());
        //prints out nulls
        //    System.out.println(Arrays.deepToString(studentArr));

        for(int i=0; i<studentArr.length; i++){
            System.out.println(studentArr[i]);
        }    

    }
    public int id(){
        int ID=1+(int)(Math.random()*((100-1)+1)); 
        return ID;
    }

    public String First(){
        Random random= new Random();
        int index= random.nextInt(first.length);
        return first[index];
    }

    public String Last(){
        Random random= new Random();
        int index= random.nextInt(last.length);
        return last[index];
    }

    public double Grades(){
        double grade=0+(double)(Math.random()*((4-1)+1));
        return grade;
    }
}

还有对象类

import java.util.Random;
public class Student
{
   private int studentID;
   private String firstName;
   private String lastName;
   private double grade;

   // no-argument constructor calls other constructor with default values
   public Student() 
   {
      this( 0, "", "", 0.0 ); // call four-argument constructor
   } // end no-argument Student constructor

   // initialize a record
   public Student( int id, String first, String last, double grade )
   {
      setStudentID( id );
      setFirstName( first );
      setLastName( last );
      setGrade( grade );
   } // end four-argument Student constructor

   // set student ID number   
   public void setStudentID( int id )
   {
      studentID = id;
   } // end method setStudentID

   // get student ID number   
   public int getStudentID() 
   { 
      return studentID; 
   } // end method getStudentID

   // set first name   
   public void setFirstName( String first )
   {
      firstName = first;
   } // end method setFirstName

   // get first name   
   public String getFirstName() 
   { 
      return firstName; 
   } // end method getFirstName

   // set last name   
   public void setLastName( String last )
   {
      lastName = last;
   } // end method setLastName

   // get last name   
   public String getLastName() 
   {
      return lastName; 
   } // end method getLastName

   // set grade  
   public void setGrade( double gradeValue )
   {
      grade = gradeValue;
   } // end method setGrade

   // get grade   
   public double getGrade() 
   { 
      return grade; 
   } // end method getGrade

   public static int getRandom(int[] array){
       int rnd= new Random().nextInt(array.length);
       return array[rnd];
    }
   public String toString(){
       return "First name: "+firstName + "Last name: " + lastName+ "ID: "+ studentID+ "Grade: " + grade+"\n";
    }
}

共 (2) 个答案

  1. # 1 楼答案

    这是初始化数组方法中for循环中的一个简单错误。声明:i>;20是循环将执行的条件。但如果我从0开始,它永远不会是20,循环也永远不会执行。只需将条件(现在是i>;20)更改为i>;20并且它会起作用。:)

  2. # 2 楼答案

    您永远不会初始化数组,因为for循环索引错误

    for (int i = 0; i > 20; i++)
    

    这意味着:对于从0开始的i,如果i大于20,则运行以下代码,每次将i的值增加1。因为i开始时已经小于20,所以它永远不会大于20,并且代码永远不会运行。相反,请执行以下操作,使您的跑步条件i小于20

    for (int i = 0; i < 20; i++)
    

    或者,更好的是:

    for (int i = 0; i < studentArr.length; i++)
    

    有关for语句语法的更多详细信息,请查看Java documentation