为什么 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< number
为 true
:
时循环继续
一旦i
超过了Integer.MAX_VALUE
的值,就会溢出到Integer.MIN_VALUE
。由于您没有为循环定义条件,它永远不会中断。所以为了打破它,要么
- 使用
break;
指令。
- 或为循环设置条件。
当int达到最大值it再增加1,它就会变成最小值而不报错。
为什么下面的循环被认为是无限循环?
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< number
为 true
:
一旦i
超过了Integer.MAX_VALUE
的值,就会溢出到Integer.MIN_VALUE
。由于您没有为循环定义条件,它永远不会中断。所以为了打破它,要么
- 使用
break;
指令。 - 或为循环设置条件。
当int达到最大值it再增加1,它就会变成最小值而不报错。