Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';这个Java循环不会终止吗?_Java_For Loop_Terminate - Fatal编程技术网

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

为什么';这个Java循环不会终止吗?,java,for-loop,terminate,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 ; } 长i=26L; 长j=24L; 用于(长x=0L;x

我不明白为什么Java中的这个循环没有终止

long i = 26L ;
long j = 24L ;
for (long x = 0L ; x < 1000L ; x++) {
    i = i / 12 + 23 * (--x ) ;
    j = (x--) + j + 5 ;
}
长i=26L;
长j=24L;
用于(长x=0L;x<1000L;x++){
i=i/12+23*(-x);
j=(x-)+j+5;
}

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

这可能是您打算做的:

for (long x = 0L ; x < 1000L ; x++) {
    long xTemp = x;
    i = i / 12 + 23 * (--xTemp ) ;
    j = (--xTemp) + j + 5 ;
}
for(长x=0L;x<1000L;x++){
长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 ;
}
for(长x=0L;x<1000L;x++){
i=i/12+23*(x-1L);
j=(x-1L)+j+5;
}

一般来说,如果将
x
指定为
for
循环计数器,那么作为一种良好做法,您不应该在循环中与它混在一起。您可以在循环中使用它的值,但让循环自己管理它。

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

这可能是您打算做的:

for (long x = 0L ; x < 1000L ; x++) {
    long xTemp = x;
    i = i / 12 + 23 * (--xTemp ) ;
    j = (--xTemp) + j + 5 ;
}
for(长x=0L;x<1000L;x++){
长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 ;
}
for(长x=0L;x<1000L;x++){
i=i/12+23*(x-1L);
j=(x-1L)+j+5;
}
一般来说,如果将
x
指定为
for
循环计数器,那么作为一种良好做法,您不应该在循环中与它混在一起。你可以在循环中使用它的值,但是让循环自己来管理它。

关键是x——做什么。。。以及x++的功能。x永远不会达到1000升。

关键是x——做什么。。。以及x++的功能。x永远不会达到1000升

我不明白为什么Java中的这个循环没有终止

long i = 26L ;
long j = 24L ;
for (long x = 0L ; x < 1000L ; x++) {
    i = i / 12 + 23 * (--x ) ;
    j = (x--) + j + 5 ;
}
变量x从零开始,每次迭代其值将增加1(通过执行x++),但减少两次(通过执行--x),算法将在每次迭代后x减少1

从技术上讲,当x为负值时,然后下溢,此时下溢x将再次大于零,然后该条件将为真:x<1000L

for (long x = 0L ; x < 1000L ; x++) {
    i = i / 12 + 23 * (--x ) ;
    j = (x--) + j + 5 ;
}
for(长x=0L;x<1000L;x++){
i=i/12+23*(-x);
j=(x-)+j+5;
}
我不明白为什么Java中的这个循环没有终止

long i = 26L ;
long j = 24L ;
for (long x = 0L ; x < 1000L ; x++) {
    i = i / 12 + 23 * (--x ) ;
    j = (x--) + j + 5 ;
}
变量x从零开始,每次迭代其值将增加1(通过执行x++),但减少两次(通过执行--x),算法将在每次迭代后x减少1

从技术上讲,当x为负值时,然后下溢,此时下溢x将再次大于零,然后该条件将为真:x<1000L

for (long x = 0L ; x < 1000L ; x++) {
    i = i / 12 + 23 * (--x ) ;
    j = (x--) + j + 5 ;
}
for(长x=0L;x<1000L;x++){
i=i/12+23*(-x);
j=(x-)+j+5;
}

Count循环体中
x
递减的次数。将其与更新表达式中增加的
x
次数进行比较。。。。并且考虑< <代码>中的循环终止表达式对于< /COD>语句仅具有上界,而不是下界(因此,下界为<>代码> Lo.MimIValue- 1 -所以循环终止,只需很长时间)在每次迭代中,你要做x-2,然后是x+1,所以在每次迭代的最后,你要将x减1。因此,x的计算永远不会与for循环语句中指定的计算交叉。因此,当我接近-7.5m时,eclipse就出现了一个错误:“IOConsole更新”遇到了一个问题。发生内部错误。更多信息是Java heap spaceCount循环体中
x
递减的次数。将其与更新表达式中增加的
x
次数进行比较。。。。并且考虑< <代码>中的循环终止表达式对于< /COD>语句仅具有上界,而不是下界(因此,下界为<>代码> Lo.MimIValue- 1 -所以循环终止,只需很长时间)在每次迭代中,你要做x-2,然后是x+1,所以在每次迭代的最后,你要将x减1。因此,x的计算永远不会与for循环语句中指定的计算交叉。因此,当我接近-7.5m时,eclipse就出现了一个错误:“IOConsole更新”遇到了一个问题。发生内部错误。更多信息请参阅Java heap Space或仅使用
x-1
而不是使用额外变量“在某个点应为负值”--它将在第一次迭代结束时为负值。或仅使用
x-1
而不是使用额外变量“在某个点应为负值”--它将在第一次迭代结束时变为负值。所取点。。。这是一个边缘案例。@ScaryWombat它不会达到1000。它将从Long.MIN_值变为Long.MAX_值,该值大于/等于1000,因此循环终止于该点:-)@ErwinBolwidt如此真实,如此真实,因此取点。。。这是一个边缘案例。@ScaryWombat它不会达到1000。它将从Long.MIN_值变为Long.MAX_值,该值大于/等于1000,因此循环终止于该点:-)@ErwinBolwidt so true,so true