是Java中的数组等于方法

时间:2018-07-06 10:43:26

标签: java arrays

我是新手,我需要编写一个方法来检查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;
}

4 个答案:

答案 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且数组相等。