2014-02-27 136 views
0

有人能告诉我为什么这个循环是无限循环吗?Java无限循环

double count = 0.0; 
while(count != 1.0) 
{count += 1.0/10;} 

为什么这个循环不是无限循环

double count = 0.0; 
while(count != 1.0) 
{count += 1.0/3;} 

我一直在试图总结我的头围绕这是一个初学者,它真的不是为我做的感觉。

+0

解决方案:用'而(计数<1.0)'代替。 – iamnotmaynard

回答

0

浮点除法涉及两种情况。浮点分割对于舍弃值几乎是相同的,但并不完全是臭名昭着的。

由于你在while循环中的条件是平等的,所以这是一个逻辑推论,在第一个条件中,舍入正在发生,因此它不能达到1.0,而在另一个舍入是这样,它能够达到1.0。

建议的意见:不要在生产层面使用这样的代码。

0

因为way double are added第一个案例的数量永远不会是1.0,所以你最终会陷入无限循环。计数在这个周期中每次迭代的量为:

计数:0.1 计数:0.2 计数:0.30000000000000004 计数:0.4 计数:0.5 计数:0.6 计数:0.7 计数:0.7999999999999999 计数: 0.8999999999999999 计数:0.9999999999999999(此数量大于1.0不同) 计数:1.0999999999999999 计数:1.2 计数:1.3 [...]

在第二周期凑如果它== 1.0,所以它结束。计数对每次迭代第二次循环的量是:

计数:0.3333333333333333 计数:0.6666666666666666 计数:1.0