1. 程式人生 > >java迴圈控制中break、continue、return的比較

java迴圈控制中break、continue、return的比較

一、break

在Java 中,break語句有3種作用。
  • 第一,在switch語句中,它被用來終止一個語句序列。

        在switch語句中,break用來終止一個語句序列,其實根據第二條,switch本身就是一個迴圈體,所以break在switch中作用也是強制退出一層迴圈,退出一個迴圈體。
  • 第二,它能被用來強制退出一個迴圈體,在多個迴圈巢狀中,break只退出當前所在的一層迴圈體。

        首先確定一下巢狀迴圈中的一層迴圈的概念,如下為3層迴圈,每一層中的break語句強制退出當前所在的迴圈層        for(;;){           //第一層迴圈

 
            if(1<2){break;}
 
            for(;;){      //第二層迴圈  
 
                if(2<3){break;}
 
                for(;;){  //第三層迴圈
 
                    if(3<4){break;}
 
                }
            }
 
        }
  • 第三,它能作為一種“先進”goto 語句來使用,帶標籤的break。

       這種情況下的break跟goto的關係是:吸收goto語句的精華,捨棄goto語句的糟粕,首先break功能使得程式退出當前迴圈層,然後確認標籤並返回到標籤處。
  • 標籤格式為“label:”,比如帶“:”;
  • 被加標籤程式碼塊必須包圍break 語句;
  • 被加標籤的程式碼塊可以是任何程式碼塊(保證有break語句即可),即break不止可以退出迴圈;
        boolean t = true;
        first: {
            second: {
                third: {
                    System.out.println("Before the break.");
 
                    if(t) break second; // break out of second block
 
                    System.out.println("This won't execute"
);
                }
                System.out.println("This won't execute");
            }
            System.out.println("This is after second block.");
        } 執行該程式,產生如下輸出: Before the break. This is after second block.

二、continue

  • continue——作用是忽略continue後面剩餘迴圈體語句,然後繼續執行本層迴圈的條件表示式,執行下一次迴圈;
  • 帶標籤continue——continue也有標籤功能,類似break的功能,即 “continue + 標籤  =  break”;
        //不帶標籤的continue
        for(int i=0; i<10; i++) {
            System.out.print(i + " ");
            if (i%2 == 0)
               continue;
            System.out.println("");
        }
 
        //帶標籤的continue
        outer:
        for (int i=0; i<10; i++) {
 
            for(int j=0; j<10; j++) {
 
                if(j > i) {
 
                    System.out.println();
                    continue outer;  //返回到標籤處,退出
//                    break;
                }
                System.out.print(" " + (i * j));
            }
        } 帶標籤的輸出結果: 0
0 1
0 2 4
0 3 6 9
0 4 8 12 16
0 5 10 15 20 25
0 6 12 18 24 30 36
0 7 14 21 28 35 42 49
0 8 16 24 32 40 48 56 64
0 9 18 27 36 45 54 63 72 81 驗證“continue + 標籤  =  break”,把語句中“continue outer; ”註釋掉,換成“break”,輸出結果如下: 0
0 1
0 2 4
0 3 6 9
0 4 8 12 16
0 5 10 15 20 25
0 6 12 18 24 30 36
0 7 14 21 28 35 42 49
0 8 16 24 32 40 48 56 64
0 9 18 27 36 45 54 63 72 81 即等式成立!即continue標籤的作用是找到迴圈體入口,繼續下一次迴圈!

三、return

  • return明確地從一個方法返回,即返回到呼叫該方法入口
測試1: public static void main( String[] args )
    {
        App ap = new App();
        ap.breakTest();
    }
 
    public void breakTest(){
 
        //不帶標籤的continue
        for(int i=0; i<10; i++) {
            System.out.print(i + " ");
            if (i%2 == 0)
               continue;
            System.out.println("");
        }
 
        //帶標籤的continue
        outer:
        for (int i=0; i<10; i++) {
 
            for(int j=0; j<10; j++) {
 
                if(j > i) {
 
                    System.out.println();
                    continue outer;  //返回到標籤處,退出
                }
                System.out.print(" " + (i * j));
            }
        }
    } 輸出結果: 0 1
2 3
4 5
6 7
8 9
0
0 1
0 2 4
0 3 6 9
0 4 8 12 16
0 5 10 15 20 25
0 6 12 18 24 30 36
0 7 14 21 28 35 42 49
0 8 16 24 32 40 48 56 64
0 9 18 27 36 45 54 63 72 81 測試2,更換continue outer; 為return:     public static void main( String[] args )
    {
        App ap = new App();
        ap.breakTest();
    }
 
    public void breakTest(){
 
        //不帶標籤的continue
        for(int i=0; i<10; i++) {
            System.out.print(i + " ");
            if (i%2 == 0)
               continue;
            System.out.println("");
        }
 
        //帶標籤的continue
        outer:
        for (int i=0; i<10; i++) {
 
            for(int j=0; j<10; j++) {
 
                if(j > i) {
 
                    System.out.println();
//                    continue outer;  //返回到標籤處,退出
                    return;
                }
                System.out.print(" " + (i * j));
            }
        }
    } 測試結果: 0 1
2 3
4 5
6 7
8 9
0 測試3,更換第一個for迴圈中的continue為returnpublic static void main( String[] args )
    {
        App ap = new App();
        ap.breakTest();
    }
 
    public void breakTest(){
 
        //不帶標籤的continue
        for(int i=0; i<10; i++) {
            System.out.print(i + " ");
            if (i%2 == 0)
//               continue;
                return;
            System.out.println("");
        }
 
        //帶標籤的continue
        outer:
        for (int i=0; i<10; i++) {
 
            for(int j=0; j<10; j++) {
 
                if(j > i) {
 
                    System.out.println();
//                    continue outer;  //返回到標籤處,退出
                    return;
                }
                System.out.print(" " + (i * j));
            }
        }
    } 測試結果: 0 當遇到第一個return時,沒有再繼續往下執行,直接返回到了方法入口!