1

我一直在查看我的代码,但我仍然无法弄清楚为什么结果始终是最高等级值,而不是数组中每个位置的不同值。

这是我的代码:

int[] gradesDescription;
int[] gradesCount;

gradesDescription = new int[(highestGrade-lowestGrade) + 1];
gradesCount = new int[(highestGrade-lowestGrade) + 1];

for(int b = lowestGrade; b <= highestGrade; b++){
  Arrays.fill(gradesDescription, b);
}

for(int d = 0; d < gradesDescription.length; d++){
 System.out.println("Grade: " + gradesDescription[d] + 
                    " had " + gradesCount[d] + " students with the same grade.");

我缺少什么逻辑;有没有更好的方法来完成我想做的事情?

非常感谢!

4

3 回答 3

2
for(int b = lowestGrade; b <= highestGrade; b++){
     Arrays.fill(gradesDescription, b);
}

此行会将值放入数组中b的每个位置。gradesDescription因此每次都是相同的值。

于 2013-05-01T21:12:44.647 回答
2

此行导致您的问题:

Arrays.fill(gradesDescription, b);

这会将每个值分配gradesDescriptionb. 你想要的是这样的:

for(int b = 0; b < gradesDescription.length; b++) {
    gradesDescription[b] = b + lowestGrade;
}

虽然,我不得不说即使这段代码看起来也是错误的。如果有 3 名学生的成绩分别为 70、80 和 100,那么预期的行为是什么? gradesDescription.length最终会是 30,但真的应该只有 3?我假设您遗漏了gradesCount分配元素的代码?

于 2013-05-01T21:12:52.643 回答
1

Arrays.fill 每次循环都用相同的值填充整个数组。我想你想要

for(int idx = 0; idx < gradesDescription.length; idx++){
  gradesDescription[idx] = idx + lowestGrade;
}
于 2013-05-01T21:15:16.687 回答