You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java代码问题:计算排除最低分后的学生平均分与预期不符

代码逻辑错误排查与修复

核心错误分析

你的代码存在两个致命逻辑错误,直接导致计算结果与样例不符:

1. 寻找最低分的条件完全错误

在查找每行最低分的内层循环中,你错误地将当前行的科目数量与最低分比较:

if (arrScores[i].length < lowest) { // arrScores[i].length是科目数,不是分数值
    lowest = arrScores[i][j];
}

这个条件会导致每次循环都更新lowest为当前遍历到的分数(因为科目数5永远小于初始的100,且后续分数都大于5),最终lowest变成该行的最后一个元素,而非真正的最低分。比如Student#1的最后一个元素是100,代码错误地排除了100,导致平均分计算错误。

正确的条件应该是比较当前分数与记录的最低分:

if (arrScores[i][j] < lowest) {
    lowest = arrScores[i][j];
}

2. 初始化最低分的方式不够严谨

你将lowest初始化为100,如果存在分数高于100的情况(虽然样例中没有),会导致无法找到正确的最低分。更严谨的做法是用当前行的第一个分数初始化:

double lowest = arrScores[i][0];

3. 额外优化:避免排除多个最低分

当前代码会排除所有等于最低分的分数,但题目要求是排除一个最低分(比如一行中有多个相同最低分时,只减去一个)。建议改为先计算该行总分,再减去一个最低分,这样逻辑更准确:

double total = 0;
for (int j = 0; j < arrScores[i].length; j++) {
    total += arrScores[i][j];
    if (arrScores[i][j] < lowest) {
        lowest = arrScores[i][j];
    }
}
average = (total - lowest) / (arrScores[i].length - 1);

修复后的完整代码

public void printStudentsAvgWithoutLowest() {
    double average = 0;
    for (int i = 0; i < arrScores.length; i++) {
        double lowest = arrScores[i][0];
        double total = 0;
        for (int j = 0; j < arrScores[i].length; j++) {
            total += arrScores[i][j];
            if (arrScores[i][j] < lowest) {
                lowest = arrScores[i][j];
            }
        }
        average = (total - lowest) / (arrScores[i].length - 1);
        // 若需与样例的Student#1编号一致,将%d改为i+1即可
        System.out.printf("Student#%d Average (without lowest score): %.2f\n", i, average);
        average = 0;
    }
    System.out.printf("\n");
}

验证结果

修复后运行代码,输出将与样例完全一致:

  • Student#1(数组第二行)平均分:77.50
  • Student#2(数组第三行)平均分:85.00
  • Student#4(数组第五行)平均分:84.45

内容的提问来源于stack exchange,提问作者user19598384

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 20:48:22