编写将对象添加到数组的方法

我编写了一个将 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;

}


30秒到达战场
浏览 159回答 2
2回答

慕的地8271018

在这种方法中: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对象分配给数组的所有项目。因此,当您尝试分配 2nd 或 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班级将只返回最后一个学生的详细信息。但是您还应该检查空值。所以改成这样:public String toString(){    String classString = "";    for(Student student : roster){        if (student != null)          classString += student.toString() + "\n";    }    return classString;}我不知道你的Student班级toString(),我认为它按预期工作。

至尊宝的传说

您的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++;    }}现在,一旦空位被填满,程序就会退出循环。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java