break與continue搭配label來控制迴圈是很有趣的方法,我經常用他來判斷自己的想法正不正確。
我作一個巢狀迴圈,外迴圈跑6次,內迴圈跑4次,加入continue跟break來看看會發生甚麼有趣的事情。
--------- example 1 -----------
public class LoopTest {
public static void main(String[] args) {
byte i, j;
L1:
for (i = 1; i <= 6; i++) { System.out.print("i=" + i); System.out.print("\t"); continue L1;
L2:
for (j = 1; j <= 4; j++) { System.out.print("j=" + j); System.out.print("\t"); } System.out.println(); } } }
--------- example 1 ends -----------
continue放在第一層for迴圈的結果,會導致L2完全沒機會被執行到,執行結果是:
i=1 i=2 i=3 i=4 i=5 i=6
--------- example 2 ---------
public class LoopTest {
public static void main(String[] args) {
byte i, j;
L1:
for (i = 1; i <= 6; i++) { System.out.print("i=" + i); System.out.print("\t"); break L1;
L2:
for (j = 1; j <= 4; j++) { System.out.print("j=" + j); System.out.print("\t"); } System.out.println(); } } }
--------- example 2 ends ---------
break放在第一層for迴圈的結果,會導致L2完全沒機會被執行到,執行結果是:
i=1
然而我們無法在這個地方放置break L2或continue L2,她會顯示找不到L2個標籤。
--------- example 3 ---------
public class LoopTest {
public static void main(String[] args) {
byte i, j;
L1:
for (i = 1; i <= 6; i++) { System.out.print("i=" + i); System.out.print("\t"); L2: for (j = 1; j <= 4; j++) { System.out.print("j=" + j); System.out.print("\t"); continue L2;
}
System.out.println();
}
}
}
--------- example 3 ends ---------
i=1 j=1 j=2 j=3 j=4
i=2 j=1 j=2 j=3 j=4
i=3 j=1 j=2 j=3 j=4
i=4 j=1 j=2 j=3 j=4
i=5 j=1 j=2 j=3 j=4
i=6 j=1 j=2 j=3 j=4
跑出來的結果可想而知,會跟沒有continue是一樣的,因為她本來就會重複作。
那麼如果是continue L1會如何呢?
--------- example 4 ----------
public class LoopTest {
public static void main(String[] args) {
byte i, j;
L1:
for (i = 1; i <= 6; i++) { System.out.print("i=" + i); System.out.print("\t"); L2: for (j = 1; j <= 4; j++) { System.out.print("j=" + j); System.out.println("\t"); //換行以方便顯示
continue L1;
}
System.out.println();
}
}
}
--------- example 4 ends ---------
i=1 j=1
i=2 j=1
i=3 j=1
i=4 j=1
i=5 j=1
i=6 j=1
內迴圈作一次之後沒機會作第二次就跑到外迴圈了,所以苦命的內迴圈用永都只能作第一次。
--------- example 5 ---------
public class LoopTest {
public static void main(String[] args) {
byte i, j;
L1:
for (i = 1; i <= 6; i++) { System.out.print("i=" + i); System.out.print("\t"); L2: for (j = 1; j <= 4; j++) { System.out.print("j=" + j); System.out.print("\t"); break L2;
}
System.out.println();
}
}
}
--------- example 5 ends ---------
break會脫離所標示的迴圈:即內迴圈,因此內迴圈永遠只能作一次。example 4跟5是一樣的結局。
i=1 j=1
i=2 j=1
i=3 j=1
i=4 j=1
i=5 j=1
i=6 j=1
--------- example 6 ---------
public class LoopTest {
public static void main(String[] args) {
byte i, j;
L1:
for (i = 1; i <= 6; i++) { System.out.print("i=" + i); System.out.print("\t"); L2: for (j = 1; j <= 4; j++) { System.out.print("j=" + j); System.out.print("\t"); break L1;
}
System.out.println();
}
}
}
--------- example 6 ends ---------
break會跳離標籤所示的迴圈:即外迴圈,因此只做一次就結束了。
i=1 j=1
很好玩吧!
沒有留言:
張貼留言