1. 在最外層循環語句前定義一個標號,循環體內任意位置都可以使用帶有標號的break語句跳出外層循環,結束整個循環。
System.out.println("MainClass1 Start...");
ko:
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
System.out.println("i=" + i + ",j=" + j);
if (j == 5)
break ko;
}
}
System.out.println("MainClass1 End.");
運行結果:
MainClass1 Start... i=0,j=0 i=0,j=1 i=0,j=2 i=0,j=3 i=0,j=4 i=0,j=5 MainClass1 End.
注:標號一定是加在循環體前面,不能放在帶標號break語句所在的循環體之后;break+標號有點像goto語句,如果循環體包含的代碼片太長,且嵌套多層循環使用了多個標號,會導致代碼不易讀。
2. 使用boolean變量做flag,作為外層循環體結束的條件,賦予變量帶有業務意義的名字。
System.out.println("MainClass1 Start...");
int arr[][] = { { 1, 2, 3 }, { 4, 5, 6, 7 }, { 9 } };
boolean found = false;
for (int i = 0; i < arr.length && !found; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.println("i=" + i + ",j=" + j);
if (arr[i][j] == 5) {
found = true;
break;
}
}
}
System.out.println("MainClass1 End.");
運行結果:
MainClass1 Start... i=0,j=0 i=0,j=1 i=0,j=2 i=1,j=0 i=1,j=1 MainClass1 End.
注:這個辦法看起來易讀一些,個人感覺比第1個好,如果很多層的嵌套循環,需要在外面每一層都加上這個flag作為結束條件。
當然,我相信還有更好的更實用的辦法,你有你牛逼,有就貼出來吧。
