我是新手,我需要编写一个方法来检查2个数组的值和顺序是否相等,如果它们打印为true,否则为false 这就是我写的,如果我出于某些原因尝试打印函数在数组中接收到的值,则结果始终为真。它们全为0。
public static boolean areArraysEqual(int[] firstArr, int[] secArr) {
firstArr = new int[N];
secArr = new int[N];
System.out.println(firstArr.length);
if(firstArr.length != secArr.length){
return false;
}
if(firstArr == null || secArr == null){
return false;
}
for(int i = 0; i < firstArr.length; i++) {
if(firstArr[i] != secArr[i]) {
return false;
}
}
return true;
}
答案 0 :(得分:2)
当您尝试重新分配参数firstArr和secArr时,原始数组内容会丢失。 不需要重新分配firstArr和secArr,因为在Java中,数组对象是按值传递的,因此可以按原样使用其内容。 下面的代码片段就足够了:
public static boolean areArraysEqual(int[] firstArr, int[] secArr) {
if(firstArr == null || secArr == null || firstArr.length != secArr.length){
return false;
}
for(int i = 0; i < firstArr.length; i++) {
if(firstArr[i] != secArr[i]) {
return false;
}
}
return true;
}
答案 1 :(得分:0)
代码的问题是您要重新声明数组。从您的代码中删除firstArr = new int[N];
和secArr = new int[N];
。这样就可以了。
public static boolean areArraysEqual(int[] firstArr, int[] secArr) {
System.out.println(firstArr.length);
if(firstArr.length != secArr.length){
return false;
}
if(firstArr == null || secArr == null){
return false;
}
for(int i = 0; i < firstArr.length; i++) {
if(firstArr[i] != secArr[i]) {
return false;
}
}
return true;
}
旁注:如果这不是出于学术/竞争目的,请使用Array.equals(firstArr, secArr)
答案 2 :(得分:0)
您正在创建两个新的数组,它们使用初始化为全零
firstArr = new int[N];
secArr = new int[N];
调用areArraysEqual(int[] firstArr, int[] secArr)
时,您已经提供了两个数组,没有理由创建新的数组。
删除这两行应该可以帮助您。
答案 3 :(得分:0)
已经提交的答案都没有,但是为此编写的代码太多了。试试这个:
public boolean compareArrays(int[] arr1, int[] arr2) {
if (Arrays.equals(arr1, arr2)) {
return true;
}
return false;
}
Arrays.equals包含顺序和大小,也不需要检查null,这应该由调用方处理,毕竟null等于null且数组相等。