我有一个赋值,它要求获得下面代码中的所有内容。这一切都很好——我只需要计算出任何超过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()
方法中去掉字段monthlyPay
和overtime
,使它们都是局部变量。
仅供参考:不鼓励对货币金额使用double
。Java中推荐的货币类型是BigDecimal
。