对值进行平均得到相同的结果

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_ZERODEFAULT_DOUBLE_ZERO,只需将它们替换为0