2013-03-05 131 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