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

构造类存在错误?学生测验平均分程序输出始终为0求排查

问题排查与修复

你的问题完全出在StudentClass的实现上,几个关键逻辑错误导致了总分和平均分始终为0,我来逐个拆解:


核心错误点:

  • addQuiz方法未累加分数:你现在的addQuiz只增加了测验次数numberQuizzes,但完全没把传入的测验分数加到total里;而且方法里的score是局部参数,和成员变量score毫无关联(成员变量score自始至终都是初始值0)。
  • getTotalScore逻辑错误:这个方法里写了total += score,但成员变量score从来没被赋值过(一直是0),而且它的职责应该是返回当前累计的总分,而非每次调用都去累加一个无效值。
  • numberQuizzes被错误定义为static:静态变量是所有类实例共享的,这意味着如果创建多个StudentClass对象,它们的测验次数会混在一起,不符合每个学生独立统计的需求。
  • 冗余的成员变量:average和score这两个成员变量完全没必要存在——平均分可以每次计算时临时得出,score也没有实际作用。
  • getName方法无效:这个方法接收了一个name参数,但既没给成员变量name赋值,参数也没被使用,完全起不到获取/设置名字的作用。

修正后的StudentClass代码:

public class StudentClass {
    private String name;
    private int numberQuizzes; // 去掉static,让每个实例独立计数
    private int total; // 只保留总分和测验次数两个核心成员变量

    // 可选:添加构造方法初始化学生名字
    public StudentClass(String name) {
        this.name = name;
    }

    // 获取名字的正确方法,无需参数
    public String getName() {
        return this.name;
    }

    // 可选:添加修改名字的方法
    public void setName(String name) {
        this.name = name;
    }

    // 正确的添加测验分数逻辑:累加总分,同时增加测验次数
    public void addQuiz(int score) {
        total += score;
        numberQuizzes++;
    }

    // 直接返回累计的总分
    public int getTotalScore() {
        return total;
    }

    // 计算并返回平均分,同时处理无测验时的除以0情况
    public int getQuizAverage() {
        if (numberQuizzes == 0) {
            return 0; // 也可以抛出异常,根据需求调整
        }
        return total / numberQuizzes;
    }
}

主类Student的小优化(可选):

你原来逐个调用addQuiz的写法太繁琐,可以改成循环遍历数组:

public class Student {
    public static void main(String[] args) {
        StudentClass quizzes = new StudentClass("张三"); // 可传入学生名字
        int[] quizArray = {54, 85, 32, 98, 43, 89};
        
        // 循环批量添加测验分数
        for (int score : quizArray) {
            quizzes.addQuiz(score);
        }

        int total = quizzes.getTotalScore();
        int average = quizzes.getQuizAverage();
        System.out.println("Total score: " + total);
        System.out.println("Quiz average: " + average);
    }
}

现在运行程序,就能得到正确的总分(54+85+32+98+43+89=401)和平均分(401/6≈66)啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:26:58