断开继续没有辅助布尔变量?

时间:2012-09-26 08:59:57

标签: java label break goto continue

在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

我需要打破 - 继续而不是从所有循环中断。

2 个答案:

答案 0 :(得分: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's documentation on labelled branching

答案 1 :(得分:3)

使用labes导致意大利面条代码使您的代码更不易读。

你可以在自己的方法中提取内部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;
    ...
}