当前位置: 首页 > 知识库问答 >
问题:

似乎无休止的循环终止,除非使用System.out.println

郎意
2023-03-14

我有一段简单的代码,它应该是一个无休止的循环,因为x将一直增长,并且始终大于j

int x = 5;
int y = 9;
for (int j = 0; j < x; j++) {
   x = x + y;
}
System.out.println(y);

但按原样,它打印y并且不会无休止地循环。我想不出为什么。但是,当我以以下方式调整代码时:

int x = 5;
int y = 9;
for (int j = 0; j < x; j++) {
    x = x + y;
    System.out.println(y);
}
System.out.println(y);

它变成了一个无休止的循环,我不知道为什么。java是否认识到它是一个无休止的循环并在第一种情况下跳过它,但在第二种情况下必须执行一个方法调用,这样它的行为就像预期的那样?困惑:)

共有1个答案

高经艺
2023-03-14

这两个例子都不是无穷无尽的。

问题是Java(或其他通用语言)中int类型的限制。当x的值达到0x7FFFFFFF时,添加任何正值都将导致溢出,x变为负值,因此低于j

第一个循环和第二个循环之间的区别是内部代码需要更多的时间,直到x溢出可能需要几分钟。对于第一个示例,它可能需要少于秒的时间,或者最有可能的是,代码将被优化器移除,因为它没有任何效果。

正如在讨论中提到的,时间将严重依赖于OS如何缓冲输出,是否输出到终端仿真器等,因此它可以远高于几分钟。

 类似资料:
  • 问题内容: 我有一段简单的代码,该代码 应该 是一个无休止的循环,因为它将一直在增长,并且始终会比更大。 但实际上,它可以打印并且不会无限循环。我不知道为什么。但是,当我以以下方式调整代码时: 这变成一个无尽的循环,我不知道为什么。java是否会识别出一个无穷循环并在第一种情况下跳过它,而在第二种情况下必须执行一个方法调用,以使其表现出预期的效果?困惑:) 问题答案: 这两个例子并不是无止境的。

  • 我有一个包含6个列表对象的userform。所有列表对象都已命名range RowSources。单击任何一个列表中的任何一个项目都将引用电子表格上的图表,并清除任何项目单元格中不属于所选内容的内容(如果您感兴趣,请在下面进行更好的解释)。我的所有列表对象只有“更新后”触发器,其他的都由私有子程序处理。 不管怎么说,有很多列表之间的循环和跳转。如果我正常运行userform,它会无休止地循环。它似

  • 问题在代码的注释中,很抱歉,我认为它更整洁,因为流程很重要,我想。。。 //*这是来自Oracle:(https://docs.oracle.com/javase/6/docs/api/java/util/Scanner.html#hasNextInt()) ”hasNextInt 公共布尔值hasnetint() 如果此扫描仪输入中的下一个标记可以使用nextInt()方法解释为默认基数中的in

  • 问题内容: 我正在浏览旧的考试问题(当前是大学一年级),我想知道是否有人可以更彻底地解释为什么以下循环在预期的情况下不会结束。为什么会这样?我了解由于舍入错误或其他原因,它会跳过100.0,但是为什么呢? 问题答案: 数字0.1不能精确地用二进制表示,就像1/3不能精确地用十进制表示一样,因此您不能保证: 这是因为在二进制文件中: 但是,双精度数不能包含无限精度,因此,正如我们将1/3近似为0.3

  • 启动无限循环后,我无法关闭JFrame。 我想停止无限循环使用停止按钮。 我用开始按钮开始一个无限循环。我想用“停止”按钮关闭那个回路。 > if(stop.getModel(). isP的()){中断;}不工作 actionListener用于识别按钮单击并在循环也不起作用时使用中断语句终止 点击停止按钮,无限循环必须终止。在使用start Button启动无限循环后,我无法使用JFrame中的

  • 我正在编写我自己的dns服务器(它接近pi hole项目,但有一些不同的/额外的功能),现在我面临着一个(对我来说)奇怪的问题: 基本上,我想做一个PTR请求IP到外部dns服务器(尝试208.67.222.222和8.8.8.8) 问题是,我最终陷入了一个无休止的循环,得到了一个SOA响应,其中主名称服务器与所请求的域相同(我想截图更精确) 但现实是这样的: