这看似愚蠢,但我对以下代码感到有点困惑:
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
之后。因此继续=假。所以如果有人能向我解释这背后的逻辑,我将非常感激!
答案 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。