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

Java主类输入无法跨类访问 仅显示初始值问题修复

问题根因

现有代码存在3个核心逻辑错误,导致只能输出初始0值:

  • 实例化Department对象的时机早于用户输入读取,对象初始化时根本拿不到后续才输入的评分数据
  • 构造方法内定义的a/b/c/d/e、gscore、oascore全是方法内部局部变量,和Main类读取的用户输入、类本身的成员变量完全没有关联,计算逻辑操作的都是临时变量,结果不会同步到类属性上
  • 仅实例化了1个Department对象,两个部门的评分数据没有独立存储,会互相覆盖
修复方案(符合要求:无参数传递、覆盖静态变量知识点、匹配UML结构)

利用静态变量类级别共享的特性实现跨类数据访问,不需要传参就能让Department类拿到主类读取的用户输入:

  1. 在Department类中新增公共静态临时变量,用于暂存主类读取的5个评分值
  2. 调整构造方法逻辑:删除构造方法内写死0值的局部变量,直接读取静态暂存的评分值,计算当前部门组分数、组平均分,同时累加更新静态全局总分数、总平均分
  3. 调整Main类执行顺序:先读取用户输入存入Department的静态变量,再实例化对应部门的对象,保证构造方法执行时能拿到正确的输入值
  4. 两个部门分别实例化独立的Department对象,避免组平均分数据互相覆盖
修复后完整代码

Department类

public class Department {
    private int groupScore;
    private double groupAverage;
    private static int overallScore;
    private static double overallAverage;
    // 静态共享暂存变量,主类可直接访问赋值,无需参数传递
    public static int rate1, rate2, rate3, rate4, rate5;

    public Department(){
        // 读取静态暂存的评分计算当前组总分
        groupScore = rate1 + rate2 + rate3 + rate4 + rate5;
        // 计算当前组平均分
        groupAverage = groupScore / 5.0;
        // 累加当前组分数到静态全局总分
        overallScore += groupScore;
        // 全局共2组10个评分,计算全局平均分
        overallAverage = overallScore / 10.0;
    }

    public double getGroupAverage() {
        return groupAverage;
    }

    public static void displayAverage() {
        System.out.println("Overall Average: " + overallAverage);
    }
}

Main类

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        // 第一个部门评分录入与计算
        System.out.println("Enter 5 rates for Department A (1-5)");
        Department.rate1 = sc.nextInt();
        Department.rate2 = sc.nextInt();
        Department.rate3 = sc.nextInt();
        Department.rate4 = sc.nextInt();
        Department.rate5 = sc.nextInt();
        Department deptA = new Department();
        System.out.println("Department 1 group average: " + deptA.getGroupAverage());
        deptA.displayAverage();
        System.out.println();

        // 第二个部门评分录入与计算
        System.out.println("Enter 5 rates for Department B (1-5)");
        Department.rate1 = sc.nextInt();
        Department.rate2 = sc.nextInt();
        Department.rate3 = sc.nextInt();
        Department.rate4 = sc.nextInt();
        Department.rate5 = sc.nextInt();
        Department deptB = new Department();
        System.out.println("Department 2 group average: "+ deptB.getGroupAverage());
        System.out.println();
        Department.displayAverage();
    }
}
代码说明
  • 全程未使用构造方法/普通方法的参数传递,完全通过静态变量的类共享特性实现跨类数据交互,符合当前阶段静态变量知识点的练习要求
  • 修正了原代码的执行顺序问题,确保对象初始化时输入数据已经准备完成,不会读取到默认0值
  • 删除了原构造方法中无意义的局部临时变量,所有计算结果直接赋值给类成员变量与静态变量,不存在计算结果丢失的问题
  • 两个部门对应独立的对象实例,组平均分数据隔离,静态全局变量自动累加两个部门的总分,全局平均分计算逻辑正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:27:20