Java正确的操作顺序

时间:2016-10-05 01:21:50

标签: java

我已经在纸上写了这个操作,它运行得很好。我知道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分。

2 个答案:

答案 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);

它为您写的方式,您返回的是整个工资,而不仅仅是加班费。