为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

30秒到达战场 2022-07-06 18:21:26
我编写了一个将 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,95Mary,11,99Bob,9,87但是,当我尝试打印 firstRoster 数组时,它只打印第一个对象。在这种情况下,它将打印 John 3 次。John,12,95John,12,95John,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 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

在这种方法中:


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(),我认为它按预期工作。


查看完整回答
反对 回复 2022-07-06
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

您的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++;

    }

}

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


查看完整回答
反对 回复 2022-07-06
  • 2 回答
  • 0 关注
  • 158 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信