我正在编写一个程序,其中,我有一个名为“equals”的方法来测试两个二维数组是否相互“相等”。如果两个参数都为空,则返回true 如果一个参数为空而另一个参数不为空,则返回false;否则返回false。 如果2个数组的行数不同,则返回false else,返回arr1中的每个元素是否与arr2中的对应元素相等,因为这两个元素都为null,或者这两个元素都指向具有相同数字的数组具有相同顺序的相同值的整数。抛出Java -NullPointerException异常,我不知道为什么
equals方法的定义:
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])
的问题是,据我所知,我的程序不应该进入封闭的环,其中该线位于开始用。它应该在这一点上返回false:
if(arr1[i] == null || arr2[i] == null) //one is null
return false;
我在做什么错在这里?谢谢。
投票结束为排印错误。 –
使用DEBUGGER。 – redFIVE