我正在编写一个程序,其中,我有一个名为“equals”的方法来测试两个二维数组是否相互“相等” . equals返回两个args是否等效,如果两个args都为null,则返回true如果一个arg为null而另一个不是,则返回false;如果2个数组具有不同的行数,则返回false else,返回arr1中的每个元素是否等同于arr2中的对应元素,即两个元素都为null,或者两个元素都引用具有相同int数的数组具有相同顺序的相同值 .
等于方法定义:
public static boolean equals( int[][] arr1, int[][] arr2){
//both are null references
if(arr1 == null && arr2 == null)
return true;
//only one is a null reference
if ((arr1 == null && arr2 != null) || (arr1 == null && arr2 != null))
return false;
//number of rows not identical
if( arr1.length != arr2.length )
return false;
for(int i = 0 ; i < arr1.length; i++){ //checking row equivalence
if(arr1[i] == null && arr2[i]==null){ //both null
continue;
}
if(arr1[i] == null || arr2[i] == null) //one is null
return false;
else if(arr1[i].length != arr2[i].length){
return false;
}
else{
for(int j = 0; j < arr1[i].length; i++){ //#of columns equal, compare them
System.out.println(i + "," + j); //helps debug
if(arr1[i][j] != arr2[i][j])
return false;
}
}
}
return true;
} //equals
我打电话的时候
equals( new int[][]{{1,2},{3,4},null}, new int[][]{{1,2},null,{3,4}} )
我的程序崩溃,抛出NullPointerException .
Eclipse说它在这一行失败了:
if(arr1[i][j] != arr2[i][j])
问题是,据我所知,我的程序不应该进入该行所在的封闭for循环 . 它应该在此时返回false:
if(arr1[i] == null || arr2[i] == null) //one is null
return false;
我在这做错了什么?谢谢 .
1 回答
你这里有缺点,
应该
因为否则你没有测试 both 是
arr1
和arr2
. However ,我更喜欢Arrays.deepEquals(Object[], Object[]),如果两个指定的数组彼此深度相等则返回true ...如果两个数组引用都为null,或者它们引用包含相同数量元素的数组,则认为两个数组引用完全相等两个阵列中相应的元素对完全相同 . 喜欢