Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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_Loops - Fatal编程技术网

循环逻辑(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++;
    }