Java主类输入无法跨类访问 仅显示初始值问题修复
问题根因
现有代码存在3个核心逻辑错误,导致只能输出初始0值:
- 实例化
Department对象的时机早于用户输入读取,对象初始化时根本拿不到后续才输入的评分数据 - 构造方法内定义的a/b/c/d/e、gscore、oascore全是方法内部局部变量,和Main类读取的用户输入、类本身的成员变量完全没有关联,计算逻辑操作的都是临时变量,结果不会同步到类属性上
- 仅实例化了1个
Department对象,两个部门的评分数据没有独立存储,会互相覆盖
修复方案(符合要求:无参数传递、覆盖静态变量知识点、匹配UML结构)
利用静态变量类级别共享的特性实现跨类数据访问,不需要传参就能让Department类拿到主类读取的用户输入:
- 在Department类中新增公共静态临时变量,用于暂存主类读取的5个评分值
- 调整构造方法逻辑:删除构造方法内写死0值的局部变量,直接读取静态暂存的评分值,计算当前部门组分数、组平均分,同时累加更新静态全局总分数、总平均分
- 调整Main类执行顺序:先读取用户输入存入Department的静态变量,再实例化对应部门的对象,保证构造方法执行时能拿到正确的输入值
- 两个部门分别实例化独立的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
相关产品推荐
相关产品推荐

