1

Javaでは、次のようなコードがあります。

boolean contains;
for (int i = 0; i < n; i++) {
    // get the current matrix value
    t = A[i][j];

    // check if it has been already considered
    contains = false;
    for (int z = 0; z < l; z++) {
        if (arrays[z].contains(t)) {
            contains = true; break;
        }
    }
    if (contains) continue;
    ...
}

labelを使用してから、内側のループからジャンプして、ブール変数なしで続行することは可能containsですか?

私はbreak-continueを実行する必要があり、すべてのループから中断する必要はありません。

4

2 に答える 2

4
outerLoop:
for (int i = 0; i < n; i++) {
    // get the current matrix value
    t = A[[i]][j];
    // check if it has been already considered
    for (int z = 0; z < l; z++) {
        if (arrays[z].contains(t)) {
            continue outerLoop;
        }
    }
}

ラベル付き分岐に関するOracleのドキュメント

于 2012-09-26T09:01:20.880 に答える
3

ラベルを使用すると、スパゲッティ コードになり、コードが読みにくくなります。

ブール値を返す独自のメソッドで内側の for ループを抽出できます。

private boolean contains(/* params */) {
    for (int z = 0; z < l; z++) {
        if (arrays[z].contains(t)) {
            return true;
        }
    }
}

外側のforループで使用します

for (int i = 0; i < n; i++) {
    // get the current matrix value
    t = A[[i]][j];

    // check if it has been already considered
    if (contains(/*params*/)) 
        continue;
    ...
}
于 2012-09-26T09:05:36.760 に答える