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

Why is for(int i=0;;i++) considered infinite loop?

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

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

i 达到其最大值 2147483647 后,然后当它递增时,程序应该显示一个错误,说 "Integer number too large" 或其他东西像那样。因此,程序应该终止。尽管达到该值需要一些时间,但它肯定不会是无限的。那为什么是无限循环呢?

此答案适用于 Java。我已经有一段时间没有使用 C# 或 C++ 了。

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

因为你什么条件都不写,语言定义为死循环

避免溢出。

试试这些:

C++:

#include <limits.h>

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

Java:

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

当您的整数达到上限时,加 1 将使其达到可能的最低值。

事实上,这不是无限的

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

它运行了 exaclty Integer.MAX_VALUE 次,因为 Integer.MAX_VALUE + 1 是 Integer.MIN_VALUE,一个负数

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

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

因为它没有像下面这样的条件:

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

条件 i< numbertrue:

时循环继续

一旦i超过了Integer.MAX_VALUE的值,就会溢出到Integer.MIN_VALUE。由于您没有为循环定义条件,它永远不会中断。所以为了打破它,要么

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

当int达到最大值it再增加1,它就会变成最小值而不报错。