我已经在纸上写了这个操作,它运行得很好。我知道java执行是从左到右,优先级是这样的; * / + - 。
Java给了我不同的结果,但我无法弄清楚原因。
public double overTimeWage() {
if (hours > 40) {
return (40 * baseRate) + (1.5 * baseRate)
* (hours - 40);
} else {
return 0;
}
}
这是我使用
输入的内容int hours = 50;
double baseRate = 12;
因为它现在返回660,我的预期回报是180。
我知道这是正确的数学公式是因为我在纸上工作。我得到了180分。
答案 0 :(得分:1)
660是预期的回报值。你的问题是你添加了一个无关紧要的难题。
根据您的方法overTimeWage
的名称判断,它应该计算工人的加班时间,即(overtimeMult * baseRate) * (hours - standardHours)
。在您的情况下,(1.5 * baseRate) * (hours - 40)
。
数学计算如下:
(1.5 * baseRate) * (hours - 40)
(1.5 * 12 ) * (50 - 40)
(18 ) * (10 )
18 * 10
180
所以我们得到了正确的答案,对吗?那么为什么你的方法返回660而不是180?事情就是这样,你的方法不会返回(1.5 * baseRate) * (hours - 40)
。它返回(40 * baseRate) + (1.5 * baseRate) * (hours - 40)
。
看到问题?你没有退还加班费。您将返回他们一整天的收入。为了清楚起见,让我们再把它们放在一起:
(40 * baseRate) + (1.5 * baseRate) * (hours - 40)
我们已经知道(1.5 * baseRate) * (hours - 40) = 180
。
(40 * baseRate) + 180
(40 * 12) + 180
480 + 180
660
<强> 660 即可。这是你的问题。这是代码执行告诉的代码的经典问题,而不是您想要的代码。
答案 1 :(得分:1)
如果你只想加班:
return (1.5 * baseRate) * (hours - 40);
它为您写的方式,您返回的是整个工资,而不仅仅是加班费。