【问题标题】:Identical results over averaging of values对值进行平均的结果相同
【发布时间】:2015-06-02 18:26:02
【问题描述】:
我正在尝试制作一个函数来获取某年学校所有学生的总成绩的平均值,但不知何故,输出一直给我 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;
}
有人可以帮帮我吗?谢谢~
【问题讨论】:
标签:
java
function
return
average
【解决方案1】:
如果给定年份没有学生,您想返回 0。这避免了除以零。正如您所提到的,循环中不需要您的 else 案例:
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。
【解决方案2】:
从 if 中取出返回,以便处理所有条目。
退出循环后,如果 count 为零则返回 0.0,否则返回当前表达式。
【解决方案3】:
如果 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;