2013-03-05 214 views
0

假设你有一分钱(0.01美元)的袜子。你每天都把袜子里的钱增加一倍。因此,第一天你有一分钱,第二天有两分钱(0.02美元),第三天有四分钱(0.04美元)等等。简单WHILE循环

doubleEachDay方法以double值,jackpot作为输入参数,计算达到或超过累积奖金金额所需的天数,从0.01开始,每天增加一倍。该方法返回加倍所需的天数;这个值应该存储在整型变量numDays中。

完成下面的doubleEachDay方法。

这是我的代码,

public int doubleEachDay(double jackpot) { 
    double amount = 0.01; 
    int numDays = 0; 

while(amount <= jackpot){ 
    amount=(amount*2); 
    numDays++; 
} 

return numDays; 
} 

我的代码保持生产1比实际的答案多一天。谢谢

回答

6

原因是浮点数不准确。例如,0.01 * 2可能等于0.0199999999而不是0.02。

而不是使用双打,你应该使用一个整数的美分数,所以1,2,4等等。

另一个原因是你写了amount <= jackpot而不是amount < jackpot。这意味着您会将amount == jackpot这一天计为一天。

或者,您也可以做一些类似jackpot - amount > 0.0000001的工作,而不是去做amount < jackpot以抵消少量的不准确性。

+0

真棒,那工作。谢谢! – user2086204 2013-03-05 01:08:09

+0

@ user2086204虽然浮点错误是您需要担心的事情,但我只是意识到了代码错误的真正原因。大声笑。检查编辑的问题;) – Patashu 2013-03-05 01:08:40

-1

我认为你要计算的数量是完全等于累积奖金的天数。

只是改变循环条件进入这个:

while (amount != jackpot)... 
+0

我收到一个无限循环错误。 – user2086204 2013-03-05 01:07:33

+0

这不会超过Patashu指出的浮点不准确性问题。 – rgettman 2013-03-05 01:08:03

+0

此外,如果头奖不是0.01的某些幂,这将不起作用。 – scaevity 2013-03-05 01:09:22