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

Java小时工周薪计算bug修复:静态变量致结果错误

修复周薪计算器的实例变量共享问题

问题根源

  1. 静态变量导致数据共享:你把HourlyWage和Worked声明为static变量,这类变量属于类本身,所有Hourly实例会共享同一组值。创建第二个实例B时,会覆盖A的静态变量数据,导致调用A的WeeklyPay()时,实际用的是B的时薪和工时。
  2. 加班薪资计算逻辑错误:原代码只计算了加班部分的薪资,漏掉了正常40小时的基础薪资,导致加班薪资计算不全。

修复方案

以下是修正后的完整代码:

修正后的Hourly类

public class Hourly extends Employee {
    // 移除static修饰符,改为实例变量,每个对象拥有独立数据
    private double hourlyWage;
    private double workedHours;

    public Hourly(int id, String name, double hourlyWage, int workedHours) {
        super(name, id);
        // 直接给当前实例的变量赋值,无需通过类名引用
        this.hourlyWage = hourlyWage;
        this.workedHours = workedHours;
    }

    protected double weeklyPay() {
        if (workedHours > 40) {
            // 正确计算:正常40小时薪资 + 加班时长×1.5倍时薪
            return 40 * hourlyWage + (workedHours - 40) * hourlyWage * 1.5;
        } else {
            return hourlyWage * workedHours;
        }
    }

    @Override
    public String toString() {
        // 若Employee类中Id和Name为私有变量,建议调用getter方法;若为protected可直接使用
        return "ID: " + getId() + ", Name: " + getName() + ", Hourly Wage: " + hourlyWage + ", Hours Worked: " + workedHours;
    }
}

主方法(可保留,仅调整输出标识)

public static void main(String[] args) {
    Hourly A = new Hourly(1111, "John Smith", 15.25, 40);
    System.out.println(A);
    Hourly B = new Hourly(2222, "Oliver Thomas", 15.50, 60);
    System.out.println(B);
    System.out.println("Weekly pay for Hourly worker A: " + A.weeklyPay());
    System.out.println("Weekly pay for Hourly worker B: " + B.weeklyPay());
}

修复后的输出

ID: 1111, Name: John Smith, Hourly Wage: 15.25, Hours Worked: 40.0
ID: 2222, Name: Oliver Thomas, Hourly Wage: 15.5, Hours Worked: 60.0
Weekly pay for Hourly worker A: 610.0
Weekly pay for Hourly worker B: 1162.5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:01:40