我无法理解为什么Java中的循环不会终止。
long i = 26L ;
long j = 24L ;
for (long x = 0L ; x < 1000L ; x++) {
i = i / 12 + 23 * (--x ) ;
j = (x--) + j + 5 ;
}
答案 0 :(得分:5)
在循环的每次迭代中,您递减计数器x
两次。这实际上意味着循环的上限永远不会被击中。实际上,即使在第一次迭代之后,计数器也应该变为负数。
这是你可能想做的事情:
for (long x = 0L ; x < 1000L ; x++) {
long xTemp = x;
i = i / 12 + 23 * (--xTemp ) ;
j = (--xTemp) + j + 5 ;
}
或者可能是这样:
for (long x = 0L ; x < 1000L ; x++) {
i = i / 12 + 23 * (x-1L) ;
j = (x-1L) + j + 5 ;
}
一般来说,如果你将x
指定为for
循环计数器,那么你就不应该在循环中乱搞它作为一个好习惯。你可以在循环中使用它的值,但让循环本身来管理它。
答案 1 :(得分:0)
关键是x--做什么......以及x ++的作用。 x永远不会达到1000L。
答案 2 :(得分:0)
我无法理解为什么Java中的循环没有终止。
好吧,变量 x 从零开始,并且在每次迭代时,它的值将增加1(通过执行 x ++ )但减少两次(通过执行 --x )算法将在每次迭代后 x 减少1时结束,
从技术上讲,x将是负数,然后 UNDERFLOWS ,在下溢 x 的那一点将再次大于零,然后这个条件将为真: x&lt; 1000L 强>
for (long x = 0L ; x < 1000L ; x++) {
i = i / 12 + 23 * (--x ) ;
j = (x--) + j + 5 ;
}