1. 程式人生 > >java標誌符與break定位跳出多層迴圈

java標誌符與break定位跳出多層迴圈

先貼兩個程式碼,然後再分析下問題:

    /**
     * @Author Young
     * @Description //測試break 標籤和識別符號進行跳出上級迴圈的操作
     * @Date 10:50 2018/8/6
     * @Param
     * @return
     **/
    public static void breakReverse(){
        int i ;
        a:
        for (i = 0 ;i<6;i++){
            for (int j = 3;j<5;j++ ){
                if (i==4){
                    i=j;
                    break a;
                }
            }
        }
        System.out.println(i);
    }
    /**
     * @Author Young
     * @Description //使用boolean識別符號
     * @Date 11:01 2018/8/6
     * @Param
     * @return
     **/
    public static void breakReverse2(){
        int i;
        Boolean flag = false;
        for (i = 0 ;i<6 && !flag;i++){
            for (int j = 3;j<5;j++ ){
                if (i==4){
                    i=j;
                    flag=true;
                    break ;
                }
            }
        }
        System.out.println(i);
    }

 

 

1,在迴圈外給一個符號(只要不是java關鍵字都可以),然後就是指定到該迴圈的位置...如果在以外的迴圈中,當條件成立時,需要跳出此次迴圈時,可以直接break 符號;直接終止此次迴圈..

 

2,在迴圈外使用了Boolean型別的flag標籤,在進入迴圈時,是將flag作為一個判斷條件執行的.所以,在內嵌的迴圈中,如果我們有條件成立,需要跳出該迴圈時,修改標識的flag標籤..所以也能達到跳出外部迴圈的目的..

 

 

比較1和2.如果是兩層的迴圈,建立使用2.2的邏輯相對比較清晰,一般在跳出迴圈的時候,我們不建議使用break "標籤名";而我們的邏輯在超過兩層迴圈時(當然這是不規範的程式碼),使用1的邏輯性和和清晰度就不言而喻了...所以選用哪一種,也是根據具體程式碼業務來實現的..

 

而現在還有一點的是,1和2,初看程式碼是沒有多大差別的..但是處理的結果卻是不同,1輸出的結果是3,而2輸出的結果是4.這就是一個坑...是for迴圈時,非首次時,先執行了後面的i++動作;所以是3+1後,發現flag為true時,跳出迴圈,而此時i已經+1,所以此時,需要注意一下.