有人可以解释这个功能的操作顺序,我无法理解它产生的顺序:
// output
// Yuhu
// Tata
// Yuhu
// Yuhu
// 3
public class Main {
public static void main(String[] args) {
int i;
for (i = 0; i < 5; i++) {
if (i >= 3) {
break;
}
System.out.println("Yuhu");
if (i >= 1) {
continue;
}
System.out.println("Tata");
}
System.out.println(i);
}
}
为什么不是Yuhu,Tata,Yuhu,Tata,3?
答案 0 :(得分:3)
首次迭代:i
为0
:i >= 3
为false
,因此不是break
。打印"Yuhu"
。 i >= 1
为false
,因此没有continue
。打印"Tata"
。
第二次迭代:i
为1
:i >= 3
为false
,因此没有break
。打印"Yuhu"
。 i >= 1
为true
,因此continue
仅此迭代结束。 <{1}}未打印。
第三次迭代:"Tata"
为i
:2
为i >= 3
,因此不是false
。打印break
。 "Yuhu"
为i >= 1
,因此true
仅此迭代结束。 <{1}}未打印。
第四次迭代:continue
为"Tata"
:i
为3
,因此i >= 3
突破true
循环,输出break
循环后的语句打印for
。
答案 1 :(得分:0)
因为它不会一次到达“Tata”,它只会在i=0
时到达那里,
continue
立即开始循环的下一次迭代
答案 2 :(得分:0)
尝试添加更多调试语句来计算出来......
int i;
for (i = 0; i < 5; i++) {
if (i >= 3) {
System.out.printf("breaking (i=%d)%n", i);
break;
}
System.out.printf("Yuhu (i=%d)%n", i);
if (i >= 1) {
System.out.printf("continuing (i=%d)%n", i);
continue;
}
System.out.printf("Tata (i=%d)%n", i);
}
System.out.println(i);
打印:
Yuhu (i=0)
Tata (i=0)
Yuhu (i=1)
continuing (i=1)
Yuhu (i=2)
continuing (i=2)
breaking (i=3)
3