我编写了一种将Student对象添加到名册数组中的方法。
void add(Student newStudent){
int i = 0;
while(i != classSize){ //classSize is the size of the roster array
if(roster[i] == null { //roster is an array of Student objects
roster[i] = newStudent;
}
i++;
}
}
我遇到的问题是,当我在主类中使用此方法时,它似乎只会添加并打印第一个对象。
我的主要方法的一部分:
ClassRoster firstRoster = new ClassRoster();
scan = new Scanner(inputFile).useDelimiter(",|\\n");
while(scan.hasNext()){
String name = scan.next();
int gradeLevel = scan.nextInt();
int testGrade = scan.nextInt();
Student newStudent = new Student(name,gradeLevel,testGrade);
firstRoster.add(newStudent);
System.out.printf(firstRoster.toString());
}
输入文本文件如下所示:
John,12,95
Mary,11,99
Bob,9,87
但是,当我尝试打印firstRoster数组时,它仅打印第一个对象。在这种情况下,它将打印John 3次。
John,12,95
John,12,95
John,12,95
如果我在文本文件中添加另一个学生,它将只打印John 4次,依此类推。
ClassRoster类中的toString方法:
public String toString(){
String classString = "";
for(Student student : roster){
classString = student.toString(); //The student object uses another toString method in the Student class
}
return classString;
}
答案 0 :(得分:1)
在这种方法中:
void add(Student newStudent){
int i = 0;
while(i != classSize){ //classSize is the size of the roster array
if(roster[i] == null { //roster is an array of Student objects
roster[i] = newStudent;
}
i++;
}
}
您将第一个newStudent
对象分配给数组的所有项目。
因此,当您尝试分配2d或3d时,所有项目都不是null
并且没有完成分配。
完成第一个作业后,只需停止循环即可:
void add(Student newStudent){
int i = 0;
while(i != classSize){ //classSize is the size of the roster array
if(roster[i] == null { //roster is an array of Student objects
roster[i] = newStudent;
break;
}
i++;
}
}
修改:
您的ClassRoster
上课的状态将仅返回最后一名学生的详细信息。
但是您还应该检查null。
因此更改为:
public String toString(){
String classString = "";
for(Student student : roster){
if (student != null)
classString += student.toString() + "\n";
}
return classString;
}
我不知道您的Student
类的toString()
,我认为它能按预期工作。
答案 1 :(得分:1)
您的while
循环使用第一个元素填充所有个可用位置。然后,由于没有位置为空,因此不会插入任何内容。
可以将循环简单地修改为:
void add(Student newStudent){
int i = 0;
while(i != classSize){ //classSize is the size of the roster array
if(roster[i] == null { //roster is an array of Student objects
roster[i] = newStudent;
break;
}
i++;
}
}
现在,一旦填补了空位,程序就会退出循环。