我們一般用break和cuntinue來控制單個循環,但是如果遇到有多個循環的情況呢,比如下面這個:
for (int i=0; i<10; i++) { for (int j=0; j<10; j++) { for (int k=0; k<10; k++) { } } }
如果有以下需求一般怎么做呢?
(1)當j+k > 5時結束所有循環;
(2)當j+k > 5時結束最里兩層循環;
(3)當j+k > 5時結束最里一層循環,跳過當前第二層循環,但繼續執行剩下的第二層循環;
1、 拋異常來跳出整個循環;
比如說當j+k > 5時結束所有循環可使用此法:
try{ for (int i=0; i<10; i++) { for (int j=0; j<10; j++) { for (int k=0; k<10; k++) { if (j + k > 5){ throw new Exception(); } } } } } catch (Exception e) { }
2、 使用條件標識符來控制循環
比如說當j+k > 5時結束最里兩層循環,第一種方法就無法做到了,可使用此法:
boolean firstLoop = true; boolean secondLoop = true; boolean thirdLoop = true; for (int i=0; i<10; i++) { if (!firstLoop){ break; } for (int j=0; j<10; j++) { if (!secondLoop){ break; } for (int k=0; k<10; k++) { if (!thirdLoop){ break; } if (j + k > 5){ thirdLoop = false; secondLoop = false; } } } }
3、 給循環添加標記,來更精准的控制循環
比如說當j+k > 5時結束最里一層循環,跳過當前第二層循環,但繼續執行剩下的第二層循環;這個使用第二種方法也能實現,只是代碼可能就會看起來更加的復雜;使用第三種方法就能讓這個變得簡單明了,代碼如下(secondLoop就是一個標記):
for (int i=0; i<10; i++) { secondLoop: for (int j=0; j<10; j++) { for (int k=0; k<10; k++) { if (j + k > 5){ continue secondLoop; } } } }
