循环逻辑(Java)
这可能看起来很傻,但我对以下代码有点困惑:循环逻辑(Java),java,loops,Java,Loops,这可能看起来很傻,但我对以下代码有点困惑: public class Loops{ public static void main(String[] args) { int i = 0; int j = 2; int k = 0; boolean continue = i<j; while (continue && k < 2) { i++; j--; k++; }
public class Loops{
public static void main(String[] args) {
int i = 0;
int j = 2;
int k = 0;
boolean continue = i<j;
while (continue && k < 2) {
i++;
j--;
k++;
}
System.out.println(j);
}
}
公共类循环{
公共静态void main(字符串[]args){
int i=0;
int j=2;
int k=0;
布尔continue=i编译器将优化您的循环,如下所示:
boolean continue = i<j;
while (true && k < 2)
这就是为什么最后j==0
尝试将条件放入while()
:
虽然(iContinue)仅在循环体外部设置,但它在循环过程中从不更新。因此Continue
在循环开始之前设置为true,然后再也不会修改。Continue在每次循环迭代后都不会重新评估自身,因为它是在循环外部定义的。
相反,检查循环条件中的i
while (i<j && k < 2) {
i++;
j--;
k++;
}
while(i仅设置变量“k”的值一次,因此也将继续。还需要在循环中重新计算条件表达式
也就是说,我建议您不要将“continue”用作可变名称;我相当确定它在许多语言中都是保留字。首先,您的continue
变量的计算结果总是true
(0<2),因此我们可以忽略它
第一次迭代:
i
最后计算为1
j
最后计算为1
k
最后计算为1
- 作为
k<2
,我们进行另一次迭代
第二次迭代:
i
最后计算为2
j
最终计算为0
k
最后计算为2
- 当k==2时,我们退出循环
然后我们打印j,其值为0。continue在循环中从未更新过,你确定吗?该代码不会编译,因为continue
是保留字,不能用作变量名。使用continue时要小心,它是循环中使用的java关键字,就像breakmore!我现在明白了。
After the first loop: j == 1, k == 1
After the second loop: j == 0, k == 2, exit now
while (i<j && k < 2)
while (i<j && k < 2) {
i++;
j--;
k++;
}