Java中Break与Continue用法疑问:代码位置对执行结果的影响
Java循环执行逻辑疑问解答
1. 第一段while循环为何没有输出2?
先看这段代码的结构:
int i=0; while(i<5){ System.out.println(i); System.out.println("Java is great."); if (i==2){ System.out.println("Ending the Loop."); break; } i++; }
逐次跟踪执行流程:
- 初始
i=0:0<5成立,进入循环,打印0和Java is great.,i≠2,执行i++,i变为1。 i=1:1<5成立,进入循环,打印1和Java is great.,i≠2,执行i++,i变为2。i=2:2<5成立,进入循环,先打印2和Java is great.,然后触发if(i==2),打印Ending the Loop.并break跳出循环。
按照代码逻辑,2应该会被打印。如果你的输出里没有2,大概率是代码位置写错了——比如把i++放在了if判断之前,这样当i=1时,执行i++变为2后直接触发break,跳过了i=2的打印步骤。
2. 最后一段do-while循环为何输出5?
对应代码:
int i=0; do{ i++; if(i==2){ System.out.println("Ending the loop."); continue; } System.out.println(i); System.out.println("Java is Great."); }while(i<5);
do-while循环的核心是先执行循环体,再检查条件,逐次跟踪:
- 初始
i=0:进入do块,i++变为1,i≠2,打印1和Java is Great.,检查1<5成立,继续循环。 i=1:进入do块,i++变为2,触发if,打印Ending the loop.,continue跳转到条件检查,2<5成立,继续循环。i=2:进入do块,i++变为3,i≠2,打印3和Java is Great.,3<5成立,继续循环。i=3:进入do块,i++变为4,打印4和Java is Great.,4<5成立,继续循环。i=4:进入do块,i++变为5,i≠2,打印5和Java is Great.,然后检查5<5不成立,循环结束。
正是因为do-while先执行循环体再判断条件,当i=4时条件成立,进入循环体后i被递增到5,此时已经执行了打印逻辑,之后才判断条件不满足退出,所以会输出5。
如何确定i++的位置以得到预期结果?
核心是拆解循环的执行顺序,逐步骤跟踪变量变化:
- while/for循环:遵循「条件检查 → 循环体执行(含分支、
i++等操作) → 下一次条件检查」的顺序。i++在循环体开头会先改变i值再执行逻辑;在末尾则先使用当前i值再改变。 - do-while循环:遵循「循环体执行 → 条件检查」的顺序,无论条件是否满足,循环体至少执行一次。
i++的位置直接影响每次循环体中使用的i值,甚至会出现最后一次循环体执行时i值超出条件范围的情况(比如上面的5)。
写代码时,先在纸上或脑子里走一遍前3-4次循环的流程,确认每一步的i值和输出内容,就能避免逻辑偏差。
内容的提问来源于stack exchange,提问作者Om Kumar Rath
相关产品推荐
相关产品推荐

