为什么这个Java循环不会终止?

bal*_*ora 0 java for-loop terminate

我无法理解为什么Java中的循环不会终止.

long i = 26L ;
long j = 24L ;
for (long x = 0L ; x < 1000L ; x++) {
    i = i / 12 + 23 * (--x ) ;
    j = (x--) + j + 5 ;
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*sen 5

在循环的每次迭代中,您将计数器递减x 两次.这实际上意味着循环的上限永远不会被击中.实际上,即使在第一次迭代之后,计数器也应该变为负数.

这是你可能打算做的:

for (long x = 0L ; x < 1000L ; x++) {
    long xTemp = x;
    i = i / 12 + 23 * (--xTemp ) ;
    j = (--xTemp) + j + 5 ;
}
Run Code Online (Sandbox Code Playgroud)

或者可能这样:

for (long x = 0L ; x < 1000L ; x++) {
    i = i / 12 + 23 * (x-1L) ;
    j = (x-1L) + j + 5 ;
}
Run Code Online (Sandbox Code Playgroud)

一般来说,如果你指定xfor循环计数器,那么你不应该在循环中乱搞它作为一个好的做法.你可以在循环中使用它的值,但让循环本身来管理它.