java標誌符與break定位跳出多層迴圈
阿新 • • 發佈:2018-10-31
先貼兩個程式碼,然後再分析下問題:
/** * @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,所以此時,需要注意一下.