如何突破Java中的嵌套循環?

我有一個像這樣的嵌套循環構造: 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


#1樓

甚至爲外循環建立一個標誌並在每次執行內循環後檢查是否能夠解決問題。 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;
}

#2樓

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;
    }
}

#3樓

若是您不喜歡breakgoto ,則能夠使用「傳統」 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;
        }
    }
}

#4樓

您能夠不使用任何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");
    }
}

#5樓

使用標籤。

INNER:for(int j = 0; j < numbers.length; j++) {
    System.out.println("Even number: " + i + ", break  from INNER label");
    break INNER;
}

參考這篇文章

相關文章
相關標籤/搜索