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

学生管理系统成绩展示模块后续if-else语句未执行问题排查

学生管理系统成绩展示问题修复

核心问题与修复方案


1. 替换else-if为独立if判断

原代码的else if链式逻辑会导致只要第一个条件满足,后续课程的判断直接被跳过。比如Wendy选了数学和英语,数学的条件满足后,英语的分支就不会执行,导致只显示第一门课的成绩。必须把每个课程的判断改成独立的if,确保所有符合条件的课程都会被处理。

2. 每次计算前重置静态平均值变量

mathAverageGrade、englishAverageGrade等是静态变量,每次点击按钮计算时会在上一次的结果上累加,导致平均值计算越来越大,结果完全错误。每次触发计算前,需要把这些变量重置为0。

3. 修正历史课的条件判断

历史课的判断条件错误地使用了courseGradeHistory[1][grStudentIndex] > 0,应该和其他课程统一判断courseGradeHistory[0][grStudentIndex] > 0(对应总分的数组维度)。


修改后的StudentGrades类代码

if (e.getSource() == gradeGetStudentIndex) {
    // 清空所有成绩展示标签
    mathGrade.setText("");
    mathAverage.setText("");
    englishGrade.setText("");
    englishAverage.setText("");
    historyGrade.setText("");
    historyAverage.setText("");

    grStudentIndex = gradeStudentCombo.getSelectedIndex();

    // 重置所有静态平均值统计变量,避免累加错误
    MainMenu.mathAverageGrade = 0;
    MainMenu.mathAverageCount = 0;
    MainMenu.englishAverageGrade = 0;
    MainMenu.englishAverageCount = 0;
    MainMenu.historyAverageGrade = 0;
    MainMenu.historyAverageCount = 0;

    // 数学成绩与班级平均分计算
    if (MainMenu.courseGradeMath[0][grStudentIndex] > 0) {
        mathGrade.setText(String.valueOf((MainMenu.courseGradeMath[0][grStudentIndex] / MainMenu.courseGradeMath[1][grStudentIndex])));
        for (int av = 0; av <= MainMenu.studentFirstName.length - 1; av++) {
            MainMenu.mathAverageGrade += MainMenu.courseGradeMath[0][av];
            MainMenu.mathAverageCount += MainMenu.courseGradeMath[1][av];
        }
        mathAverage.setText(String.valueOf(MainMenu.mathAverageGrade / MainMenu.mathAverageCount));
    }

    // 英语成绩与班级平均分计算
    if (MainMenu.courseGradeEnglish[0][grStudentIndex] > 0) {
        englishGrade.setText(String.valueOf((MainMenu.courseGradeEnglish[0][grStudentIndex] / MainMenu.courseGradeEnglish[1][grStudentIndex])));
        for (int av = 0; av <= MainMenu.studentFirstName.length - 1; av++) {
            MainMenu.englishAverageGrade += MainMenu.courseGradeEnglish[0][av];
            MainMenu.englishAverageCount += MainMenu.courseGradeEnglish[1][av];
        }
        englishAverage.setText(String.valueOf(MainMenu.englishAverageGrade / MainMenu.englishAverageCount));
    }

    // 历史成绩与班级平均分计算(修正条件判断)
    if (MainMenu.courseGradeHistory[0][grStudentIndex] > 0) {
        historyGrade.setText(String.valueOf((MainMenu.courseGradeHistory[0][grStudentIndex] / MainMenu.courseGradeHistory[1][grStudentIndex])));
        for (int av = 0; av <= MainMenu.studentFirstName.length - 1; av++) {
            MainMenu.historyAverageGrade += MainMenu.courseGradeHistory[0][av];
            MainMenu.historyAverageCount += MainMenu.courseGradeHistory[1][av];
        }
        historyAverage.setText(String.valueOf(MainMenu.historyAverageGrade / MainMenu.historyAverageCount));
    }
}

额外优化建议

  • 避免使用大量静态变量,建议封装Student、Course、Grade实体类,通过对象管理数据,代码更易维护,也能从根源避免静态变量的累加问题。
  • 当前使用整数除法会丢失小数精度,如果需要显示精确的平均分,建议改用double类型进行计算后再格式化输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:43:24