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

时间:2019-02-24 22:08:56

标签: java arrays object text-files

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

2 个答案:

答案 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++;
    }
}

现在,一旦填补了空位,程序就会退出循环。