Java小时工周薪计算bug修复:静态变量致结果错误
修复周薪计算器的实例变量共享问题
问题根源
- 静态变量导致数据共享:你把
HourlyWage和Worked声明为static变量,这类变量属于类本身,所有Hourly实例会共享同一组值。创建第二个实例B时,会覆盖A的静态变量数据,导致调用A的WeeklyPay()时,实际用的是B的时薪和工时。 - 加班薪资计算逻辑错误:原代码只计算了加班部分的薪资,漏掉了正常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
相关产品推荐
相关产品推荐

