为什么(int i = 0 ;; i ++)被认为是无限循环?

时间:2015-12-06 12:43:40

标签: java infinite-loop

为什么以下循环被认为是无限循环?

for(int i=0;;i++)
{
    //
}

i达到其最大值 2147483647 之后,然后当它递增时,程序应显示错误,指出“整数过大”或类似的情况。因此,程序应该终止。尽管达到该值需要一些时间,但它肯定不是无限的。那为什么它是无限循环?

6 个答案:

答案 0 :(得分:6)

这个答案适用于Java。自从我在C#或C ++工作以来已经有一段时间了。

不,当整数增加超过其最大值时,它会溢出到其最小值。在这种情况下没有异常抛出,所以循环可以永远继续,因为没有条件来结束循环(除非在循环体内有一些break语句)。 / p>

答案 1 :(得分:2)

当你的整数达到上边缘时,加1会使它达到最低值。

事实上,这不是无限的

for(int i=0;i>=0;i++);

它运行时间Integer.MAX_VALUE次,因为Integer.MAX_VALUE + 1是Integer.MIN_VALUE,负数

答案 2 :(得分:1)

因为你没有写任何条件,语言将它定义为无限循环。

避免溢出。

试试这些:

C ++:

#include <limits.h>

for(int i=0;;i++)
{
    //
    if(i == INT_MAX) break;
}

爪哇:

for(int i=0;;i++)
{
    //
    if(i == Integer.MAX_VALUE) break;
}

答案 3 :(得分:1)

i传递Integer.MAX_VALUE的值后,它会溢出到Integer.MIN_VALUE。由于您没有为循环定义条件,永远不会破坏。所以为了打破它,要么

  1. 使用break;指令。
  2. 或将条件设置为循环。

答案 4 :(得分:1)

当int达到其最大值并再增加一个时,它将变为最小值而不是给出任何错误。

答案 5 :(得分:0)

(对于java)这个循环被认为是一个无限循环:

 for(int i=0;;i++)
 {
//
  }

因为它没有以下条件:

  for(int i=0;i< number;i++)
  {
//
  }

此条件i< numbertrue时,循环继续: