我正在做一个项目,其中可能需要创建任意数量的对象,而且我永远不会确切地知道我需要做多少。
我想要做的是每次通过此循环时都创建一个新对象。然后它会立即将它添加到名为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个人对象。任何帮助将不胜感激,谢谢。
答案 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
----------------------
....