有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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;

我有两个阵列:

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

虽然它们显然不相等,但程序返回。 我知道内置函数数组。equals(),但是我想手动执行此操作,以便全面理解函数


共 (5) 个答案

  1. # 1 楼答案

    (array1[i] == array2[j])时,不应该调用return

    而且while将永远循环

    代码应该是这样的:

    public static boolean equals(int[] array1, int[] array2)
    {
    
    if(array1.length != array2.length) return false;
    
    int i = 0;
    int j = 0;
    while(i < array1.length)  //or i < array2.length
    {
    
        if(array1[i] == array2[j])
        {
            i++;
            j++;
        }
        else
        {
            return false;
        }
    }
    return true;
    
  2. # 2 楼答案

    试试这个:

    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;
    }
    
  3. # 3 楼答案

    试试这样的。将您的控制变量(我已将其重命名为equal)设置为true,如果出现任何问题(数组大小不相同或元素不相等),则将其设置为false、break和return

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

    另外,这在某种程度上是一个意见问题,但是只有一个return语句有利于可读性和维护

    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. # 4 楼答案

    1. 如果数组的长度不同,则它们不相等,因此立即返回
    2. 使用for循环迭代数组
    3. 仅在整个循环完成且未发现差异后返回true
    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;
    }
    

    {a1}与此非常相似。它还对两个数组进行null检查,以避免抛出NullPointerException

  5. # 5 楼答案

    您的问题是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;
        }
    }