我正在尝试编写代码来比较两个数组。在第一个数组中,我放置了自己的数字,但第二个数组从输入文件中获取数字。此数组的大小由文件中的第一个数字确定,而第一个数组的大小始终为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;
}
}
}
}
答案 0 :(得分:64)
从我看到你只是试着看看它们是否相等,如果这是真的,那就去做这样的事情:
boolean areEqual = Arrays.equals(arr1, arr2);
这是执行此操作的标准方法。
Ops,从java doc开始,它必须对数组进行排序以使其被认为是相等的:
“如果两个数组包含相同数量的元素,并且两个数组中所有相应的元素对相等,则认为两个数组相等。换句话说,如果它们包含相同顺序的相同元素,则两个数组相等“
很抱歉错过了。
答案 1 :(得分:34)
使用
Arrays.equals(ary1,ary2);
//返回布尔值
修改强>
您可以使用Arrays.deepEquals(ary1,ary2)
来比较 2D数组以及
还要检查this link,了解Arrays.equls(ar1,ar2)
和Arrays.deepEquals(ar1,ar2)
Java Arrays.equals() returns false for two dimensional arrays
编辑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;
}
答案 2 :(得分: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);
}
答案 3 :(得分:7)
如果你知道数组的大小相同,那么排序比较快,比较
Arrays.sort(array1)
Arrays.sort(array2)
return Arrays.equals(array1, array2)
如果您不想更改数组中数据的顺序,请先执行System.arraycopy
。
答案 4 :(得分: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;
}
答案 5 :(得分:1)
尽管有一些像.equals
这样容易的东西,但我想指出你在代码中犯的两个错误。第一个:当您浏览数组时,您说b
是true
或false
。然后你再次开始检查,因为for循环。但每次你给b
一个值。因此,无论发生什么,值b
设置为始终是LAST for循环的值。下次,设置boolean b = true
,if equal = true
,不执行任何操作,if equal = false
,b=false
。
其次,您现在使用array1
中的每个值检查array2
中的每个值。如果我理解正确,您只需要检查数组中相同位置的值,这意味着您应该删除第二个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);
答案 6 :(得分:1)
您可以使用Apache Commons ArrayUtils#isEquals()方法检查数组相等性。
答案 7 :(得分:1)
数组的长度必须相同,数字在整个数字中是相同的(数组中的第一个数字必须是sasme,依此类推)
根据此评论,您已经拥有算法:
检查两个数组是否具有相同的长度:
array1.length == array2.length
相同位置的数字必须相同:
array1 [x] == array2 [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
}
注意:您的函数应返回boolean
,而不是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");
}
}
答案 8 :(得分: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");
}
}
}
答案 9 :(得分:-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;
}