平等的数组比较

时间:2018-04-25 13:43:43

标签: java

我已经检查并注意到有关于这个主题的其他几个主题,但是我没有找到任何直接针对这个特定问题的线索,我也没有看到它的答案。 所以这是我的代码:

    public static boolean equals(int[] array1, int[] array2)
    {
    boolean trueFalse = true;
    while(array1.length == array2.length)
    {
        int i = 0;
        int j = 0;
        if(array1[i] == array2[j])
        {
            i++;
            j++;
            return trueFalse;
        }
        else
        {
            trueFalse = false;
            break;
        }
    }
    return trueFalse;

我有2个阵列:

    int[] array = {2, 30, 22, 1, 5};
    int[] array1 = {2, 30, 4, 1, 5};

虽然它们显然不相等但程序返回 true 。 我知道内置函数 Arrays.equals(),但我想手动完成它以完整地理解函数。

5 个答案:

答案 0 :(得分:7)

  1. 如果数组长度不同,则它们不相等,所以立即返回。
  2. 使用for循环遍历数组。
  3. 只有在整个循环结束后才返回true,并且没有找到任何差异。
  4. public static boolean equals(int[] array1, int[] array2) {
        if (array1.length != array2.length) {
            return false;
        }
        for (int i = 0; i < array1.length; ++i) {
            if (array1[i] != array2[i]) {
                return false;
            }
        }
        return true;
    }
    

    Arrays.equals implementation与此非常相似。它还会对两个数组进行空值检查,以避免抛出NullPointerException

答案 1 :(得分:0)

试试这个:

boolean check(int[] arr1, int[] arr2){
    if (arr1.length != arr2.length) return false;

    for(int i=0; i<arr1.length; i++){
        if (arr1[i] != arr2[i])
            return false;
    }
    return true;
}

答案 2 :(得分:0)

你的问题是while循环对if()语句只有一次相同,比较两个数组你可以使用下面的代码:

public static boolean equals(int[] array1, int[] array2) {
    if (array1.length != array2.length) {
        return false;
    } else {
        for (int i = 0; i < array1.length; i++) {
            if (array1[i] != array2[i]) {
                return false;
            }
        }
        return true;
    }
}

答案 3 :(得分:0)

尝试这样的事情。将控制变量(我已将其重命名为equal)设置为true,如果有任何失败(数组大小不同或元素不相等),则将其设置为false,break并返回。 / p>

请注意,您只需要一个索引,因为数组必须具有相同的大小,并且数组相同,必须具有相同顺序的相同元素。

此外,有点意见,但只有一个返回声明可能有利于可读性和维护。

public static boolean equals(int[] array1, int[] array2) {
boolean equal = true;
if (array1.length == array2.length) {
    for (int i = 0; i < array1.length; i++) {
        if (array1[i] != array2[i]) {
            equal = false;
            break;
        }
    }
} else {
    equal = false;
}
return equal;

答案 4 :(得分:0)

-mcpu=cortex-m3 -mthumb -O3 -fmessage-length=0 -ffunction-sections -fdata-sections -flto -Wall -Wextra -g3 -std=gnu11

时,您不应该致电return

(array1[i] == array2[j])也将永远循环

代码应该是这样的:

while