在Java中比较两个整数数组
我正在尝试编写代码来比较两个数组。 在第一个数组中,我把我自己的数字,但第二个数组从数据input文件。 该数组的大小由文件中的第一个数字确定,而第一个数组始终是大小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; } } } }
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); }
从我看到的只是试图看看它们是否平等,如果这是真的,那就去看看这样的事情吧:
boolean areEqual = Arrays.equals(arr1, arr2);
这是做这件事的标准方式。
操作系统,它接缝的数组必须也被认为是平等的,从Java文档:
“如果两个数组包含相同数量的元素,则两个数组被认为是相等的,并且两个数组中所有对应的元素对都是相等的。换句话说,如果两个数组以相同的顺序包含相同的元素,
对不起,错过了。
使用
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; }
如果您知道数组的大小相同,则sorting和比较的速度可能会更快
Arrays.sort(array1) Arrays.sort(array2) return Arrays.equals(array1, array2)
如果你不想改变数组中数据的顺序,那么先做一个System.arraycopy
。
您可以使用Apache Commons ArrayUtils#isEquals()方法检查数组是否相等。
即使有像.equals
这样简单的东西,我想指出你在代码中犯的两个错误。 第一:当你通过数组,你说b
是true
或false
。 然后你再次开始检查,因为for循环。 但是每次你给一个价值。 所以,无论发生什么情况,值b
被设置为总是最后一个for循环的值。 下一次,设置boolean b = true
, if equal = true
,则不做任何事, if equal = false
,则b=false
。
其次,你现在用array2
每个值检查array1
中的每个值。 如果我理解正确,你只需要检查数组中的相同位置的值,这意味着你应该删除第二个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);
数组的长度必须相同,整个数字才是相同的(数组中的第一个数字必须是sasme等等)
基于这个评论,那么你已经有了你的algorithm:
-
检查两个数组是否具有相同的长度:
array1.length == array2.length
-
这些数字在同一位置必须相同:
array1 [x] == array2 [x]
知道这一点,你可以像这样创build你的代码(这不是Java代码,它是一个algorithm):
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 }
注意:你的函数应该返回一个boolean
,而不是一个void
,然后恢复另一个variables的返回值,并用它来打印“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"); } }
现有的答案都不涉及使用比较器,因此不能用于二叉树或sorting。 所以我只是想把这个留在这里:
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; }
为了完整起见,你应该有一个可以检查所有数组的方法:
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; }