我正在尝试制作一个功能,以获得学校所有学生在一定年份内的总分数的平均值,但不知何故输出一直给我0.0我知道如果我拿出else语句该功能将起作用但是如果输入的年份不存在,那么结果将是NaN,但如果年份不存在,我想要的结果是0.0。
public double getClassAverage(int schoolYear){
int count = DEFAULT_ZERO;
double totalScore = DEFAULT_DOUBLE_ZERO;
for (School student : studentCensus){
int year = student.getSchoolYear();
double score = student.getScore();
if ( schoolYear == year){
count++;
totalScore = totalScore + score;
}else{
return totalScore;
}
}
return totalScore / count;
}
有人可以帮我一把吗?谢谢〜
答案 0 :(得分:1)
从if中取回所有条目的处理。
当您退出循环时,如果count为零则返回0.0,否则返回当前表达式。
答案 1 :(得分:1)
如果schoolYear不是学生x的年份,为什么要返回当前值?你不想简单地想跳过那个学生,这意味着删除了else-block?是的,你必须在除以之前检查计数是否大于零......
// We may not divide by Zero, otherwise NaN, so return 0.0 then...
if (count == DEFAULT_ZERO)
return 0.0;
// Otherwise return the actual result...
return totalScore / count;
答案 2 :(得分:1)
如果某一年没有学生,您想要返回0。这避免了除零。正如你所提到的,循环中不需要你的其他情况:
public double getClassAverage(int schoolYear){
int count = DEFAULT_ZERO;
double totalScore = DEFAULT_DOUBLE_ZERO;
for (School student : studentCensus){
int year = student.getSchoolYear();
if ( schoolYear == year){
count++;
double score = student.getScore();
totalScore = totalScore + score;
}
}
if (count > 0) {
return totalScore / count;
} else {
return 0;
}
}
此外,我认为不需要常量DEFAULT_ZERO
和DEFAULT_DOUBLE_ZERO
,只需将其替换为0
。