如何在Java中比较两个2D数组?

时间:2018-09-19 16:10:57

标签: java arrays for-loop multidimensional-array

我是一个初学者,试图用Java写一个函数,如果两个true类型的2D二维数组在每个维度上的大小相同,则返回int,否则返回false。要求是,如果两个数组均为null,则应返回true。如果一个是null而另一个不是,则应返回false

以某种方式导致我的代码出错:

public static boolean arraySameSize(int[][] a, int[][] b) {
    if (a == null && b == null) {
        return true;
    }
    if (a == null || b == null) {
        return false;
    }
    if (a.length == b.length) {
        for (int i = 0; i < a.length; i++) {
            if (a[i].length == b[i].length) {
                return true;
            }
        }   
    }
    return false;
}

任何帮助将不胜感激!

编辑:问题是“运行时错误:空”

1 个答案:

答案 0 :(得分:3)

您的逻辑几乎已经确定。我看到的唯一问题是处理两个数组都不为null的逻辑具有相同的第一维。如果任何索引的长度都不匹配,则应该返回false:

public static boolean arraySameSize(int[][] a, int[][] b) {
    if (a == null && b == null) {
        return true;
    }
    if (a == null || b == null) {
        return false;
    }
    if (a.length != b.length) {
        return false;
    }

    // if the code reaches this point, it means that both arrays are not
    // null AND both have the same length in the first dimension
    for (int i=0; i < a.length; i++) {
        if (a[i] == null && b[i] == null) {
            continue;
        }
        if (a[i] == null || b[i] == null) {
            return false;
        }
        if (a[i].length != b[i].length) {
            return false;
        }
    }

    return true;
}

按照下面的演示链接查看该方法的一些示例。

Demo