27

我正在尝试编写代码来比较两个数组。在第一个数组中我放了自己的数字,但第二个数组从输入文件中获取数字。该数组的大小由文件中的第一个数字确定,而第一个数组的大小始终为 10。两个数组的长度必须相同,数字也必须相同。

我的代码如下:

public static void compareArrays(int[] array1, int[] array2) {
    boolean b = false;
    for (int i = 0; i < array2.length; i++) {

        for (int a = 0; a < array1.length; a++) {

            if (array2[i] == array1[a]) {
                b = true;
                System.out.println("true");
            } else {
                b = false;
                System.out.println("False");
                break;
            }
        }
    }       
}
4

10 回答 10

72

从我所见,您只是尝试查看它们是否相等,如果是true,请使用以下内容:

boolean areEqual = Arrays.equals(arr1, arr2);

这是执行此操作的标准方法。

请注意,数组也必须排序以被视为相等,来自 JavaDoc:

如果两个数组包含相同数量的元素,并且两个数组中所有对应的元素对相等,则认为两个数组相等。换句话说,如果两个数组以相同的顺序包含相同的元素,则它们是相等的。

很抱歉错过了。

于 2013-02-15T15:02:25.170 回答
35

使用
Arrays.equals(ary1,ary2); // 返回布尔值

编辑
您也可以用来Arrays.deepEquals(ary1,ary2)比较二维数组

还检查此链接Arrays.equls(ar1,ar2)以了解和之间的比较比较Arrays.deepEquals(ar1,ar2)

Java Arrays.equals() 为二维数组返回 false

编辑 2
如果您不想使用这些库方法,那么您可以像这样轻松地实现您的方法:

public static boolean ArrayCompare(int[] a, int[] a2) {
    if (a==a2)   // checks for same array reference
        return true;
    if (a==null || a2==null)  // checks for null arrays
        return false;

    int length = a.length;
    if (a2.length != length)  // arrays should be of equal length
        return false;

    for (int i=0; i<length; i++)  // compare array values
        if (a[i] != a2[i])
            return false;

    return true;
}
于 2013-02-15T15:03:31.287 回答
19
public static void compareArrays(int[] array1, int[] array2) {
        boolean b = true;
        if (array1 != null && array2 != null){
          if (array1.length != array2.length)
              b = false;
          else
              for (int i = 0; i < array2.length; i++) {
                  if (array2[i] != array1[i]) {
                      b = false;    
                  }                 
            }
        }else{
          b = false;
        }
        System.out.println(b);
    }
于 2013-02-15T15:15:09.913 回答
7

如果您知道数组的大小相同,则可以证明排序更快,然后进行比较

Arrays.sort(array1)
Arrays.sort(array2)
return Arrays.equals(array1, array2)

如果您不想更改数组中数据的顺序,System.arraycopy请先执行。

于 2013-02-15T15:01:59.233 回答
2

您可以使用 Apache Commons ArrayUtils#isEquals()方法检查数组是否相等。

于 2013-02-15T15:05:29.960 回答
2

现有答案都不涉及使用比较器,因此不能用于二叉树或排序。所以我要把这个留在这里:

public static int compareIntArrays(int[] a, int[] b) {
    if (a == null) {
        return b == null ? 0 : -1;
    }
    if (b == null) {
        return 1;
    }
    int cmp = a.length - b.length;
    if (cmp != 0) {
        return cmp;
    }
    for (int i = 0; i < a.length; i++) {
        cmp = Integer.compare(a[i], b[i]);
        if (cmp != 0) {
            return cmp;
        }
    }
    return 0;
}
于 2016-09-23T19:24:52.840 回答
1

即使有一些简单的东西.equals,我还是想指出您在代码中犯的两个错误。第一个:当你遍历数组时,你说bis trueor false。然后你再次开始检查,因为 for 循环。但是每次你都给出b一个值。因此,无论发生什么,b设置的值始终是 LAST for 循环的值。下一次,设置boolean b = true, if equal = true, 什么都不做, if equal = false, b=false.

其次,您现在正在检查每个值array1array2. 如果我理解正确,您只需要检查数组中同一位置的值,这意味着您应该删除第二个 for 循环并像这样检查:if (array2[i] == array1[i]). 那么你的代码也应该能正常工作。

您的代码将像这样工作:

public static void compareArrays(int[] array1, int[] array2) {
    boolean b = true;
    for (int i = 0; i < array2.length; i++) {
        if (array2[i] == array1[i]) {
            System.out.println("true");
        } else {
            b = false;
            System.out.println("False");
        }
    } 
    return b;

}

但正如其他人所说,更容易的是: Arrays.equals(ary1,ary2);

于 2013-02-15T15:01:57.430 回答
1

数组的长度必须相同,并且数字始终相同(数组中的第一个数字必须是 sasme 等等)

基于这个评论,那么你已经有了你的算法:

  1. 检查两个数组是否具有相同的长度:

    array1.length == array2.length

  2. 相同位置的数字必须相同:

    数组1[x] == 数组2[x]

知道了这一点,您可以像这样创建代码(这不是 Java 代码,它是一种算法):

function compareArrays(int[] array1, int[] array2) {

    if (array1 == null) return false
    if (array2 == null) return false

    if array1.length != array2.length then return false

    for i <- 0 to array1.length - 1
        if array1[i] != array2[i] return false

    return true
}

注意:您的函数应该返回 a boolean,而不是 a void,然后在另一个变量中恢复返回值并使用它来打印消息“true”或“false”:

public static void main(String[] args) {
    int[] array1;
    int[] array2;
    //initialize the arrays...
    //fill the arrays with items...
    //call the compare function
    boolean arrayEquality = compareArrays(array1, array2);
    if (arrayEquality) {
        System.out.println("arrays are equals");
    } else {
        System.out.println("arrays are not equals");
    }
}
于 2013-02-15T15:16:09.827 回答
0

这是我的方法,它可能对其他人有用。

public static void compareArrays(int[] array1, int[] array2) {
    if (array1.length != array2.length)
    {
           System.out.println("Not Equal");
    }
    else
    {
        int temp = 0;
        for (int i = 0; i < array2.length; i++) {  //Take any one of the array size
            temp^ = array1[i] ^ array2[i];   //with help of xor operator to find two array are equal or not                 
        }
        if( temp == 0 )
        {
             System.out.println("Equal");
        }
        else{
             System.out.println("Not Equal");
        }
    }
}
于 2017-12-14T13:15:12.973 回答
-2

为了完整起见,您应该有一个可以检查所有数组的方法:

    public static <E> boolean compareArrays(E[] array1, E[] array2) {
      boolean b = true;
      for (int i = 0; i < array2.length; i++) {
        if (array2[i].equals(array1[i]) ) {// For String Compare
           System.out.println("true");
        } else {
           b = false;
           System.out.println("False");
        }
      } 
      return b;
    }
于 2014-02-17T22:51:52.530 回答