此代码是我的老师为打印图案提供的。 为什么此代码会陷入无限循环?
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.print("Enter the number>");
int num = scan.nextInt();
for (int i = 0; i < num; i++)
{
for (int j =0; j <=i; j ++)
{
num = num +1;
System.out.print(num+" ");
}
System.out.println();
}
}
答案 0 :(得分:1)
仅当i> = num时,外循环才会结束。每次它将i递增1,而在内循环内部,您还将变量num递增1。每次外循环运行,num都会被内循环多次递增。因此num将始终大于i,并且循环将永远运行。
答案 1 :(得分:0)
循环是无限的,因为在变量num的第二个变量内,它总是增加1(num = num +1),而在变量i的第一个变量中求值(i
答案 2 :(得分:0)
此函数将为任何大于0的整数输入进入无限循环。 让我们浏览一下为什么。
首先让我们假设输入为1。
所以num = 1。
然后我们检查循环条件i 然后我们检查下一个循环条件j <= i(j初始化为0且i为0),条件为true。 现在我们终于可以解决num增加1的问题。现在num = 2。 现在检查内部循环条件为假,因为j在循环结束时增加了。 现在检查外部循环条件仍然正确,因为num = 2和i = 1(请记住,i在循环结束时增加了)。所以我 现在应该清楚,外循环条件永远不会为假,循环将永远继续。
答案 3 :(得分:0)
实际上,您的代码不会进入无限循环。其他答案已经告诉您,为什么您的代码没有在您期望的时间内结束(因为您在内部循环中增加了num
,从而使i < num
的作用不及预期),但让我告诉您,您的循环仍然可以完成。
我对您的代码做了一些更改:
int num = new Scanner(System.in).nextInt();
int i;
for (i = 0; i < num; i++) {
for (int j =0; j <=i; j ++) {
num = num +1;
}
}
System.out.println("final i: " + i);
System.out.println("final num: " + num);
如您所见,我将i
的声明移出了for
块,以便以后可以访问它,并且在循环中删除了System.out.println
调用,因为它们很费时间(Java同步对控制台资源的访问)。现在,该程序甚至不需要花很长时间即可完成,只需一两秒钟(取决于您的系统性能)。
输入“ 500”的结果如下:
决赛i:65536
最终号码:-2147450380
如您所见,程序完成并且i
的值为65536(对于您为num
的初始值输入的任何数字,该值都为),并且num
为负。发生这种情况是因为int
的值范围是-2,147,483,648到2,147,483,647和when you increment a number over the maximum, it "overflows"(如果将数字减少到最小值以下,则会“下溢”)。代码在内部循环内递增num
,因此比在外部循环内递增i
更频繁。这意味着num
早于i
达到整数最大值,并且更早溢出。在那一刻,i < num
变成true
,外部循环将退出。