我有一個像這樣的嵌套循環構造: html
for (Type type : types) { for (Type t : types2) { if (some condition) { // Do something and break... break; // Breaks out of the inner loop } } }
如今如何擺脫兩個循環? 我看過相似的問題,但沒有一個是Java特有的。 我沒法應用這些解決方案,由於大多數使用的gotos。 java
我不想將內部循環使用其餘方法。 ide
我不想從新運行循環。 中斷時,我完成了循環塊的執行。 oop
甚至爲外循環建立一個標誌並在每次執行內循環後檢查是否能夠解決問題。 spa
像這樣: code
for (Type type : types) { boolean flag=false; for (Type t : types2) { if (some condition) { // Do something and break... flag=true; break; // Breaks out of the inner loop } } if(flag) break; }
boolean broken = false; // declared outside of the loop for efficiency for (Type type : types) { for (Type t : types2) { if (some condition) { broken = true; break; } } if (broken) { break; } }
若是您不喜歡break
和goto
,則能夠使用「傳統」 for循環而不是for-in,並帶有額外的停止條件: htm
int a, b; bool abort = false; for (a = 0; a < 10 && !abort; a++) { for (b = 0; b < 10 && !abort; b++) { if (condition) { doSomeThing(); abort = true; } } }
您能夠不使用任何label:和標誌而中斷全部循環。 blog
這只是棘手的解決方案。 ci
這裏的condition1是用於中斷循環K和J的條件。而condition2是用於中斷循環K,J和I的條件。 get
例如:
public class BreakTesting { public static void main(String[] args) { for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { for (int k = 0; k < 9; k++) { if (condition1) { System.out.println("Breaking from Loop K and J"); k = 9; j = 9; } if (condition2) { System.out.println("Breaking from Loop K, J and I"); k = 9; j = 9; i = 9; } } } } System.out.println("End of I , J , K"); } }
使用標籤。
INNER:for(int j = 0; j < numbers.length; j++) { System.out.println("Even number: " + i + ", break from INNER label"); break INNER; }
參考這篇文章