如何在每次循环中创建一个新对象?

时间:2015-09-17 21:44:48

标签: java arrays loops object

我正在做一个项目,其中可能需要创建任意数量的对象,而且我永远不会确切地知道我需要做多少。

我想要做的是每次通过此循环时都创建一个新对象。然后它会立即将它添加到名为list的arrayList中。

for (int x = 0; x < list.size(); x++) {
    GradeInfo person(x) = new GradeInfo();
    list.add(person(x));

    list.get(x).setStudentID(inputFile.nextInt());
    inputFile.nextLine();
    list.get(x).setFullName(inputFile.nextLine());
    testScore = inputFile.nextDouble();
    list.get(x).setTestScore(testScore);
    list.get(x).setGrade(testScore);
    averageScore = averageScore + testScore;

}

以上是我每次通过循环时尝试创建一个新对象,但它不起作用。

理想情况是

GradeInfo person1 = new GradeInfo();
list.add(person1);

这种情况会发生并且会发生多次经历循环,在我的情况下它会创建10个人对象。任何帮助将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:0)

您发布的示例是否已编译?此语法无效Java:

GradeInfo person(x) = new GradeInfo();

看起来你正在混合使用一些C ++。但是你有正确的想法:在循环的每次迭代中创建一个新对象......只需在循环的每次迭代中创建一个新对象!

for (int x = 0; x < list.size(); x++)
{
    GradeInfo person = new GradeInfo();
    list.add(person);
    ...
}

但是,添加到当前正在迭代的列表中是不明智的,特别是对于评估for循环结束条件的方式。编写它的方式,每次迭代都会在列表中添加一些内容,然后在迭代结束时再次调用list.size(),它将返回列表的新大小。所以这实际上最终会成为一个无限循环,因为你的列表不断扩展。所以你应该在这里使用两个单独的列表:GradeInfo之一和一个人。

您也无需检索刚刚添加到列表中的GradeInfo以便使用它;您已经有了对它的引用,因此您可以直接对引用进行操作,您将看到已添加到列表中的项目中反映的更改。

int numPersons = personList.size();
List<GradeInfo> gradeInfos = new ArrayList<GradeInfo>();
for (int x = 0; x < numPersons; x++)
{
    GradeInfo newGradeInfo = new GradeInfo();
    gradeInfos.add(newGradeInfo);

    newGradeInfo.setStudentID(inputFile.nextInt());
    inputFile.nextLine();

    newGradeInfo.setFullName(inputFile.nextLine());

    testScore = inputFile.nextDouble();
    newGradeInfo.setTestScore(testScore);
    newGradeInfo.setGrade(testScore);

    averageScore = averageScore + testScore;
}

您最终会得到一个不同的GradeInfo对象列表。如果您要编写一个采用GradeInfo并打印出其信息的方法,您可以遍历此列表并查看确切的结果。

for (final GradeInfo gradeInfo : gradeInfos)
{
    printInfo(gradeInfo);
}

=>
StudentID: 123
FullName: asdf asdf
TestScore: 100
Grade: 100
----------------------
StudentID: 456
FullName: michael jackson
TestScore: 23
Grade: 23
----------------------
....