简单的WHILE循环

时间:2013-03-05 01:01:38

标签: java

假设你的袜子里有一分钱(0.01美元)。每天你在袜子里加倍的钱。因此,在第一天你有1美分,第二天你有两美分(0.02美元),第三天你有4美分(0.04美元),依此类推。

doubleEachDay方法将double值作为输入参数,并计算达到或超过累积奖金额所需的天数,从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;
}

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

2 个答案:

答案 0 :(得分:6)

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

不应使用双精度数,而应使用一个整数,分数为1美分,等等为1,2,4等等。

另一个原因是你写了amount <= jackpot而不是amount < jackpot。这意味着您将amount == jackpot作为额外一天的日期计算。

或者,您可以执行类似amount < jackpot的操作,而不是执行jackpot - amount > 0.0000001,以抵消轻微的不准确性。

答案 1 :(得分:-1)

我认为您想要计算金额完全等于累积奖金的天数。

只需将循环条件更改为:

while (amount != jackpot)...