与值平均相同的结果

时间:2015-03-29 20:18:18

标签: java function return average

我正在尝试制作一个功能,以获得学校所有学生在一定年份内的总分数的平均值,但不知何故输出一直给我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;
}

有人可以帮我一把吗?谢谢〜

3 个答案:

答案 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_ZERODEFAULT_DOUBLE_ZERO,只需将其替换为0