循环逻辑(Java)

时间:2011-11-26 15:16:04

标签: 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++;
    }
    System.out.println(j);
}

}

这个程序打印0,但我只是不明白它为什么不打印1.我看到它的方式,在一个循环i = j = 1之后。因此继续=假。所以如果有人能向我解释这背后的逻辑,我将非常感激!

5 个答案:

答案 0 :(得分:4)

continue在每次循环迭代后都不会重新评估,因为他是在循环之外定义的。 相反,检查i&lt;的循环条件。 Ĵ

    while (i<j && k < 2) {
        i++;
        j--;
        k++;
    }

答案 1 :(得分:3)

您的循环将由编译器优化为:

boolean continue = i<j;
while (true && k < 2)

最后

while (k < 2)

因此需要循环两次才能退出

After the first loop: j == 1, k == 1 
After the second loop: j == 0, k == 2, exit now

这就是为什么最后j == 0

尝试将条件置于while()

while (i<j && k < 2)

答案 2 :(得分:2)

继续仅在循环体外部设置,在循环期间永远不会更新。因此continue在循环开始之前设置为true,然后再也不会被修改。

答案 3 :(得分:0)

您只需设置变量'k'的值,因此也会继续。您还需要重新评估循环内的条件表达式。

那就是说,我建议你不要使用'继续'作为一个多变的名字;我很确定它是许多语言中的保留词。

答案 4 :(得分:0)

首先,您的continue变量始终评估为true(0 <2),因此我们可以忽略它。

第一次迭代:

  • i最终评估为1。
  • j最终评估为1。
  • k最终评估为1。
  • 作为k < 2,我们再做一次迭代。

第二次迭代:

  • i最终评估为2。
  • j最终评估为0。
  • k最终评估为2。
  • 作为k == 2,我们退出循环。

然后我们打印j,其值为0。