有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java比较二维数组

我试着用这个来比较两个2D阵列。但我不断发现“数组不一样。”即使它们是一样的

     int i;
     int j = 0;
     int k;
     int l;

List<Integer> list = new ArrayList<Integer>();
List<Integer> list1 = new ArrayList<Integer>();
List<Integer> zero = new ArrayList<Integer>();

 for ( i = 1; i <= 16; i++) {
    list.add(i);


}

//System.out.println(list); //[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
Collections.shuffle(list.subList(1, 15));
System.out.println(list);

Collections.replaceAll(list, 16, 0);
   System.out.println(list);


// System.out.println(list); //[11, 5, 10, 9, 7, 0, 6, 1, 3, 14, 2, 4, 15, 13, 12, 8]

int[][] a2 = new int[4][4];
int [][] a3 = new int[4][4];
for ( i = 0; i < 4; i++) {
    for ( j = 0;  j< 4; j++) {


        a2[i][j] = list.get(i*4 + j);
        a3[i][j] = list.get(i*4 + j);
    }

}
for (int[] row : a2) {
System.out.print("[");
for (   int a : row)
    System.out.printf("%4d", a);
System.out.println("]");
}
for (int[] row : a3) {
System.out.print("[");
for (   int a : row)
    System.out.printf("%4d", a);
System.out.println("]");
}
 boolean check1 = Arrays.equals(a2, a3);
if(check1 == false)
System.out.println("Arrays are not same.");
else
System.out.println("Both Arrays are same.");

我也不能这样做。 布尔校验1=数组。等于(a2[i][j],a3[i][j])


共 (2) 个答案

  1. # 1 楼答案

    第一个不起作用,因为二维整数数组实际上是数组数组(即对象数组)。对象数组的Arrays.equals()方法使用equals()来测试相应的元素是否相等。不幸的是,对于您的代码,数组的equals()是默认的Object实现:只有当它们是相同的对象时,它们才是equal()。在你的情况下,他们不是

    在第二种情况下,当您编写Arrays.equals代码并传递两个int值时,编译器无法将其与Arrays类的任何签名相匹配

    检查相等性的一种方法是使用deepEquals:

    boolean check1 = Arrays.deepEquals(a2, a3);
    

    另一种方法是显式迭代外部数组:

    boolean check1 = true;
    for (int i = 0; check1 && i < a2.length; ++i) {
        check1 = Arrays.equals(a2[i], a3[i]);
    }
    
  2. # 2 楼答案

    boolean check1 = Arrays.deepEquals(a2, a3);
    

    这绝对是可能的。它的实现使用Object[],这可能会吸引您,因为它会检查您动态传递的数组的类型

    但是,如果您想要更强大的输入和更少的开销,您可以编写自己的如下

    import java.util.Arrays;
    
    /**
     * Operations on multi-dimensional arrays.
     * 
     * @author stephen harrison
     */
    public class ArrayUtils {
        private ArrayUtils() {
            // Static methods only
        }
    
        public static <T> boolean equals(final T[][] a, final T[][] b) {
            if (a == b) {
                return true;
            }
    
            if (a == null || b == null) {
                return false;
            }
    
            if (a.length != b.length) {
                return false;
            }
    
            for (int i = 0; i < a.length; ++i) {
                if (!Arrays.equals(a[i], b[i])) {
                    return false;
                }
            }
    
            return true;
        }
    
        public static <T> boolean equals(final T[][][] a, final T[][][] b) {
            if (a == b) {
                return true;
            }
    
            if (a == null || b == null) {
                return false;
            }
    
            if (a.length != b.length) {
                return false;
            }
    
            for (int i = 0; i < a.length; ++i) {
                if (!equals(a[i], b[i])) {
                    return false;
                }
            }
    
            return true;
        }
    }
    

    2D数组上的第一个equals调用Arrays.equals()。3D版本类似地称为2D版本

    我希望这有帮助