我正在试图解决为什么这个循环终止......
@Test
public void test() {
int counter=0;
int from = 0;
int until = Integer.MAX_VALUE;
while(counter <= until) {
counter++;
if(counter < from) {
System.out.println("continuing " + counter + " <= " + from);
continue;
}
}
System.out.println("finished " + counter);
}
while(counter <= until)
应始终解析为true
,因为计数器不能超过Integer.MAX_VALUE。因此,循环不应该终止。
然而,在Eclipse中,如果我使用JUnit运行器运行,我得到:
finished 108772
如果我在调试器中运行,我会得到:
finished 125156
if(counter < from)
中的输出永远不会输出。如果我删除该块,代码仍然会终止,这次是在Integer.MAX_VALUE。
finished 2147483647
答案 0 :(得分:0)
不确定你在这里尝试做什么你的while循环将按预期工作但是from永远不会改变所以“counter to than”永远不会被执行?
直到(max int)将= 2147483647
如果您将while循环更改为(counter&lt; until),则会得到“finished 2147483647”的输出文本
有帮助吗?
答案 1 :(得分:0)
我无法重现你的输出所以这不是一个答案,只是一个观察。请考虑这些问题。
int counter=0;
int until = Integer.MAX_VALUE;
while(counter <= until) {
counter++;
while条件是'小于或等于'。因此,当counter等于Integer.MAX_VALUE时,会向其添加一个。这会产生尽可能大的Java负数。继续向此值添加一个,它最终将变为零,然后再次计数直到达到Integer.MAX_VALUE。然后整个序列重新开始。对我来说,它看起来像是一个无限循环。
您还可以在每次迭代时执行'continue'行,同时从最大负数开始计算。