1. 程式人生 > >Java標籤在迴圈中的使用

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