JAVA的入门者。我正在尝试打印学生的GPA。找到以下说明问题。
我们只能有3个等级:A,B,C对应于点4,3,2。假设一个学生有 获A,A,A和B等级。GPA=(4 + 4 + 4 + 3)/ 4 = 3.75。
calculateGPA应该返回学生的GPA数组。
输入: 学生列表= {1001,1002} 学生成绩= {{'A','A','A','B'},{'A','B','B'}};
输出:(预期)
3.75,3.333
输出:(实际)
4.00,0.00
free
答案 0 :(得分:0)
问题出在内部循环中:您的循环条件为j < studentsGrades.length
,应在j < studentsGrades[i].length
上遍历数组studentsGrades[i]
的所有条目。
编写此代码的一种更干净的方法是使用增强的for
循环,因为无论如何您只需要值,而不是索引。除了易于阅读之外,还避免了诸如编写错误的循环绑定之类的细微错误的可能性。
for(int i = 0; i < studentsGrades.length; i++) {
double sumGrades = 0.0;
char[] currentGrades = studentsGrades[i];
for(char grade : currentGrades) {
if(grade == 'A') {
sumGrades += 4;
}
else if(grade == 'B') {
sumGrades += 3;
}
else if(grade == 'C') {
sumGrades += 2;
}
}
Grades[i] = sumGrades / currentGrades.length;
}
最后的分裂有同样的问题;您需要除以该学生的分数,而不是除以学生人数。
还请注意,i++
在外部循环的更新步骤中已经完成,因此您不应该在行Grades[i] = ...
中也这样做。