continue和break可以改變循環的執行流程,但在多重循環中,這兩條語句無法直接從內層循環跳轉到外層循環。在C語言中,可以通過goto語句實現多重循環的跳轉,但在非循環結構中使用goto語句會使程序的結構紊亂,可讀性變差。因此Java就發明了一種帶標簽的continue和break語句,實際上它是一種帶限制的專門用于循環的goto語句。
通常情況下我們使用的continue(或break)語句不帶標簽,這時也就是默認在當前的循環中執行continue(或break)語句。帶標簽的循環實際上就是給這個循環起了個名字,當使用“continue(或break)+標簽”語句時實際上就是在標簽所在的循環執行continue(或break)語句。
現在我們用三個例子來說明帶標簽的循環。
1. 不帶標簽的二重循環
1
2
3
4
5
6
7
8
9
10
11
|
package javaleanning; public class LableTest { public static void main(String[] args) { for ( int i = 0 ; i < 10 ; i++){ for ( int j = 0 ; j < 10 ; j++){ System.out.print( "(" +i+ "," +j+ ") " ); } System.out.println(); } } } |
運行結果
(0,0) (0,1) (0,2) (0,3) (0,4) (0,5) (0,6) (0,7) (0,8) (0,9)
(1,0) (1,1) (1,2) (1,3) (1,4) (1,5) (1,6) (1,7) (1,8) (1,9)
(2,0) (2,1) (2,2) (2,3) (2,4) (2,5) (2,6) (2,7) (2,8) (2,9)
(3,0) (3,1) (3,2) (3,3) (3,4) (3,5) (3,6) (3,7) (3,8) (3,9)
(4,0) (4,1) (4,2) (4,3) (4,4) (4,5) (4,6) (4,7) (4,8) (4,9)
(5,0) (5,1) (5,2) (5,3) (5,4) (5,5) (5,6) (5,7) (5,8) (5,9)
(6,0) (6,1) (6,2) (6,3) (6,4) (6,5) (6,6) (6,7) (6,8) (6,9)
(7,0) (7,1) (7,2) (7,3) (7,4) (7,5) (7,6) (7,7) (7,8) (7,9)
(8,0) (8,1) (8,2) (8,3) (8,4) (8,5) (8,6) (8,7) (8,8) (8,9)
(9,0) (9,1) (9,2) (9,3) (9,4) (9,5) (9,6) (9,7) (9,8) (9,9)
2. 帶標簽的二重循環,“break+標簽”語句
在這個例子中是個二重for循環,我們給外層循起始處加了標簽(也就是說給外層循環起了個名字)“outerCycle”,在內層循環使用“break outerCycle”時,就相當于在outerCycle這個循環中直接使用break語句。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package javaleanning; public class LableTest { public static void main(String[] args) { outerCycle: for ( int i = 0 ; i < 10 ; i++){ for ( int j = 0 ; j < 10 ; j++){ if (j == 5 ){ break outerCycle; } System.out.print( "(" +i+ "," +j+ ") " ); } System.out.println(); } } } |
運行結果
(0,0) (0,1) (0,2) (0,3) (0,4)
3. 帶標簽的二重循環,“continue+標簽”語句
在這個例子中是個二重for循環,我們給外層循起始處加了標簽(也就是說給外層循環起了個名字)“outerCycle”,在內層循環使用“continue outerCycle”時,就相當于在outerCycle這個循環中直接使用continue語句。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package javaleanning; public class LableTest { public static void main(String[] args) { outerCycle: for ( int i = 0 ; i < 10 ; i++){ for ( int j = 0 ; j < 10 ; j++){ if (j == 5 ){ continue outerCycle; } System.out.print( "(" +i+ "," +j+ ") " ); } System.out.println(); } } } |
運行結果
(0,0) (0,1) (0,2) (0,3) (0,4) (1,0) (1,1) (1,2) (1,3) (1,4) (2,0) (2,1) (2,2) (2,3) (2,4) (3,0) (3,1) (3,2) (3,3) (3,4) (4,0) (4,1) (4,2) (4,3) (4,4) (5,0) (5,1) (5,2) (5,3) (5,4) (6,0) (6,1) (6,2) (6,3) (6,4) (7,0) (7,1) (7,2) (7,3) (7,4) (8,0) (8,1) (8,2) (8,3) (8,4) (9,0) (9,1) (9,2) (9,3) (9,4)
注意:實際運行結果全部在一行顯示(即沒有執行換行語句),現在這樣的顯示結果僅僅是出于排版的原因