Java標籤在迴圈中的使用
《Think in Java》 第三章 控制程式流程 3.2.6 中斷和繼續
“標籤”是後面跟一個冒號的識別符號,就象下面這樣:
label1:
對Java 來說,唯一用到標籤的地方是在迴圈語句之前。進一步說,它實際需要緊靠在迴圈語句的前方——在
標籤和迴圈之間置入任何語句都是不明智的。而在迴圈之前設定標籤的唯一理由是:我們希望在其中巢狀另
一個迴圈或者一個開關。這是由於 break和 continue 關鍵字通常只中斷當前迴圈,但若隨同標籤使用,它們
就會中斷到存在標籤的地方。如下所示:
label1:
外部迴圈{
內部循壞{
break ; // 1
continue; // 2
continue label1; // 3
break label1; // 4
}
}
在條件1 中,break 中斷內部迴圈,並在外部迴圈結束
在條件2 中,continue 移回內部迴圈的起始處
在條件3 中,continue label1 卻同時中斷內部迴圈以及外部迴圈,並移至label1 處。隨後,它實際是繼續
迴圈,但卻從外部迴圈開始
在條件4 中,break label1也會中斷所有迴圈,並回到label1 處,但並不重
新進入迴圈。也就是說,它實際是完全中止了兩個迴圈
1.for迴圈的例子
public class LabeledFor {
public static void main(String[] args) {
int i = 0;
outer: // 標籤
for(; true; ) {
inner:
for(; i < 10; i++) {
System.out.println("i = " + i);
if(i == 2) {
System.out.println("continue" );
continue;
}
if(i == 3) {
System.out.println("break");
i++;
break;
}
if(i == 7) {
System.out.println("continue outer");
i++;
continue outer;
}
if(i == 8) {
System.out.println("break outer");
break outer;
}
for(int k = 0; k < 5; k++) {
if(k == 3) {
System.out.println("continue inner");
continue inner;
}
}
}
}
}
}
輸出結果:
i = 0
continue inner
i = 1
continue inner
i = 2
continue
i = 3
break
i = 4
continue inner
i = 5
continue inner
i = 6
continue inner
i = 7
continue outer
i = 8
break outer
2.while迴圈的例子
public class LabeledWhile {
public static void main(String[] args) {
int i = 0;
outer:
while(true) {
System.out.println("Outer while loop");
while(true) {
i++;
System.out.println("i = " + i);
if(i == 1) {
System.out.println("continue");
continue;
}
if(i == 3) {
System.out.println("continue outer");
continue outer;
}
if(i == 5) {
System.out.println("break");
break;
}
if(i == 7) {
System.out.println("break outer");
break outer;
}
}
}
}
}
輸出結果:
Outer while loop
i = 1
continue
i = 2
i = 3
continue outer
Outer while loop
i = 4
i = 5
break
Outer while loop
i = 6
i = 7
break outer