有条理地打破Java中的循环

时间:2014-12-22 17:25:10

标签: java loops break

我试图查看多维数组是否为矩形。我是编程新手,无法准确找出"打破的原因;"不会让我离开循环而继续运行。即使阵列不是矩形,我仍然可以恢复原状。

public static void main(String[] args) {

    int a2d[][] = {{1, 2, 3, 4, 5}, {2, 3, 4}, {1, 2, 3, 4, 5}};

    int test = a2d[0].length;

    for (int i = 0; i < a2d.length; i++) {
        for (int j = 0; j < a2d[i].length; j++) {
            if (a2d[i].length == test) {
                System.out.println("True");
            } else {
                System.out.println("False");
                break;
            }
        }
    }
}

3 个答案:

答案 0 :(得分:3)

为了避免使用标签,请将代码放入返回布尔值的方法中:

boolean isRectangular(int[][] a2d) {
    int test = a2d[0].length;
    for (int i=0; i<a2d.length; i++){
        for (int j=0; j<a2d[i].length; j++){
            if (a2d[i].length != test) {
                return false;
            }
        }
    }
    return true;
}

可以改进代码以支持参数检查等等,但关键是你在确定答案后立即从方法返回。

答案 1 :(得分:2)

问题的Java 8方法将遵循:

int a2d[][] = {{1, 2, 3, 4, 5}, {2, 3, 4}, {1, 2, 3, 4, 5}};
boolean isRectangular = 
    Arrays.stream(a2d) // First, create a stream
            .map(row -> row.length) // Map the length of each row to process further
            .allMatch(len -> len == a2d[0].length); // Verify the length of all rows

如果使用,则不需要外部循环,这意味着没有中断。此外,如果需要,循环可以是并行的(可能加速)。

答案 2 :(得分:0)

public static void main(String[] args) {

        int a2d[][] = {{1,2,3,4,5},
                       {2,3,4},
                       {1,2,3,4,5}};

        int test = a2d[0].length;
        outer:
        for (int i=0; i<a2d.length; i++){

            for (int j=0; j<a2d[i].length; j++){

                if (a2d[i].length == test) {
                    System.out.println("True");
                } else {
                    System.out.println("False");
                    break outer;
                }
            }
        }
    }

这应该做。谷歌在labeled for loopsThis也可以为您提供帮助。