如何在HourlyWorker类中实现计算加班费的方法



我有一个赋值,它要求获得下面代码中的所有内容。这一切都很好——我只需要计算出任何超过160小时的月工作时间,就可以按正常小时工资的1.5倍支付。我的数学似乎很好,计算也很好:

((小时-160(*加班(+(160*小时费率(

但我不知道我是否将这个if语句放在正确的方法中,或者它是否应该是if语句。在此之前,我的加薪/减薪方法正在发挥作用,它们需要保留。我去掉了一些东西,这样更容易阅读。

钟点工等级:

public class HourlyWorker extends Employee
{
private int hours;
private double hourlyRate;
private double monthlyPay;
private double overtime = (1.5 * hourlyRate);
public HourlyWorker(String last, String first, String ID, double rate)
{
super(last, first, ID);
hourlyRate = rate;
}
public void setHours(int hours)
{
this.hours = hours;
}
public int getHours()
{
return hours;
}
public void setHourlyRate(double rate)
{
this.hourlyRate = rate;
}
public double getHourlyRate()
{
return hourlyRate;
}

public double getMonthlyPay()
{
if (hours > 160)
{
monthlyPay = ((hours - 160) * overtime) + (160 * hourlyRate);
}
else 
{
monthlyPay = hourlyRate * hours;
}
return monthlyPay;
}
public void increasePay(double percentage)
{
hourlyRate *= 1 + percentage / 100;
}
public void decreasePay(double percentage)
{
hourlyRate *= 1 - percentage / 100;
}
}

我正在测试的内容:

public class TestEmployee2
{
public static void main(String[] args)
{
Employee [] staff = new Employee[3];
HourlyWorker hw1 = new HourlyWorker("Bee", "Busy", "BB1265", 10);

hw1.setHours(200);    
staff[0] = hw1;
System.out.println(staff[0].getMonthlyPay());
staff[0].increasePay(10);
System.out.println(staff[0].getMonthlyPay());
}
}

输出为:
1600(初始月工资,加班40小时,正常工作160小时(
1760(每月工资增加10%(

应为:
2006
2206.6

您的代码存在以下问题:

  • 字段初始化程序在构造函数的主体之前运行,因此overtime = (1.5 * hourlyRate)hourlyRate字段使用默认值0,计算出overtime值0,并且从不重新计算,因为初始化程序在初始化期间只运行一次。

  • setHourlyRate()更新hourlyRate字段,但不重新计算overtime字段的值。与increasePay()decreasePay()相同。

  • monthlyPay字段没有意义,因为您从来没有真正使用过它,因为您只将它当作getMonthlyPay()方法中的局部变量来使用。

getMonthlyPay()方法中去掉字段monthlyPayovertime,使它们都是局部变量。

仅供参考:不鼓励对货币金额使用double。Java中推荐的货币类型是BigDecimal

最新更新