break、continue


break可以離開目前switch、for、while、do..while的區塊,並執行區塊後下一個陳述句,在switch中主要用來中斷下一個case比對,在for、whiledo..while中,主要用於中斷目前迴圈。

continue作用與break類似,不過使用於迴圈,break會結束區塊執行,而continue只會略過之後陳述句,並回到迴圈區塊開頭進行下一次迴圈,而不是離開迴圈。例如:

for(int i = 1; i < 10; i++) {
    if(i == 5) {
        break;
    }
    System.out.printf("i = %d%n", i);
}

這段程式會顯示i = 1到i = 4,因為在i等於5時就會執行break而離開迴圈。再看下面這個程式:

for(int i = 1; i < 10; i++) {
    if(i == 5) {
        continue;
    }
    System.out.printf("i = %d%n", i);
}

這段程式會顯示i =1到4,以及6到9,當i等於5時,會執行continue直接略過之後陳述句,也就是該次的System.out.printf()該行並沒有被執行,直接從區塊開頭執行下一次迴圈,所以i = 5沒有被顯示。

breakcontinue還可以配合標籤使用,例如本來break只會離開for迴圈,設定標籤與區塊,則可以離開整個區塊。

back : {
    for(int i = 0; i < 10; i++) {
        if(i == 9) {
            System.out.println("break");
            break back;
        }
    }
    System.out.println("test");
}

程式執行結果會顯示breakback是個標籤,當break back;時,返回至back標籤處,之後整個back區塊不執行而跳過,所以System.out.println("test")該行不會被執行。

continue也有類似的用法,只不過標籤只能設定在for之前。例如:

back1:
for(int i = 0; i < 10; i++){
    back2:
    for(int j = 0; j < 10; j++) {
        if(j == 9) {
            continue back1;
        }
    }
    System.out.println("test");
}

continue配合標籤,可以自由地跳至任何一層for迴圈,可以試試continue back1continue back2的不同,設定back1時,System.out.println("test")不會被執行。