咱們通常用break和cuntinue來控制單個循環,可是若是遇到有多個循環的狀況呢,好比下面這個:oop
for (int i=0; i<10; i++) { for (int j=0; j<10; j++) { for (int k=0; k<10; k++) { } } }
若是有如下需求通常怎麼作呢?spa
(1)當j+k > 5時結束全部循環;code
(2)當j+k > 5時結束最裏兩層循環;blog
(3)當j+k > 5時結束最裏一層循環,跳過當前第二層循環,但繼續執行剩下的第二層循環;io
一、 拋異常來跳出整個循環;class
好比說當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) { }
二、 使用條件標識符來控制循環方法
好比說當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; } } } }
三、 給循環添加標記,來更精準的控制循環di
好比說當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; } } } }