对值进行平均得到相同的结果
Identical results over averaging of values
我正在尝试创建一个函数来获取某一年学校所有学生总分的平均值,但不知何故输出一直给我 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;
}
有人可以帮帮我吗?谢谢~
从 if 中取出 return,以便处理所有条目。
当您退出循环时,return 0.0 如果计数为零,否则 return 您当前的表达式。
如果 schoolYear 不是学生 x 的年份,为什么要 return 当前值?难道您不只是想跳过那个学生,这意味着删除 else 块吗?是的,在除以它之前,您必须检查计数是否大于零...
// 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;
如果给定年份没有学生,你想 return 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
。
我正在尝试创建一个函数来获取某一年学校所有学生总分的平均值,但不知何故输出一直给我 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;
}
有人可以帮帮我吗?谢谢~
从 if 中取出 return,以便处理所有条目。
当您退出循环时,return 0.0 如果计数为零,否则 return 您当前的表达式。
如果 schoolYear 不是学生 x 的年份,为什么要 return 当前值?难道您不只是想跳过那个学生,这意味着删除 else 块吗?是的,在除以它之前,您必须检查计数是否大于零...
// 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;
如果给定年份没有学生,你想 return 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
。