首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >简单的WHILE循环

简单的WHILE循环
EN

Stack Overflow用户
提问于 2013-03-05 09:01:38
回答 2查看 1.7K关注 0票数 0

假设你的袜子里有1美分(0.01美元)。每一天,你的口袋里的钱都会翻倍。因此,第一天你有1美分,第二天你有2美分(0.02美元),第三天你有4美分(0.04美元),以此类推。

doubleEachDay方法将一个双精度值jackpot作为其输入参数,并计算达到或超过大奖金额所需的天数,从0.01开始,每天加倍。该方法返回加倍所需的天数;该值应存储在整数变量numDays中。

完成下面的doubleEachDay方法。

这是我的代码

代码语言:javascript
运行
复制
public int doubleEachDay(double jackpot) {
  double amount = 0.01;
  int numDays = 0;

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

 return numDays;
}

我的代码总是比实际答案多产生1天。谢谢

EN

回答 2

Stack Overflow用户

发布于 2013-03-05 09:04:40

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

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

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

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

票数 6
EN

Stack Overflow用户

发布于 2013-03-05 09:06:20

我假设你想要计算金额完全等于大奖的天数。

只需将循环条件更改为:

代码语言:javascript
运行
复制
while (amount != jackpot)...
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15214002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档