我正试图编写代码来比较两个数组。在第一个数组中,我输入了自己的数字,但第二个数组从输入文件中获取数字。这个数组的大小是由文件中的第一个数字决定的,而第一个数组的大小总是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;
}
}
}
}
在我看来,你只是试着看看它们是否相等,如果这是真的,就用这样的方法:
boolean areEqual = Arrays.equals(arr1, arr2);
这就是标准的做法。
Ops,从java文档中可以看出,数组必须经过排序才能被认为是相等的:
"如果两个数组包含相同数量的元素,并且两个数组中所有对应的元素对都是相等的,那么两个数组就被认为是相等的。换句话说,如果两个数组以相同的顺序包含相同的元素,那么这两个数组就是相等的";
抱歉错过了这一点。
尽管有像.equals
这样简单的东西,我还是想指出你的代码中的两个错误。第一:当你通过数组时,你说b
是true
或false
。然后你又开始检查,因为有for-loop。但是每次你都给b'一个值。所以,不管发生什么,
b被设置的值总是最后一个for-loop的值。下一次,设置
boolean b = true,
if equal = true,什么都不做,
if equal = false,
b=false`。
第二,你现在正在检查array1
中的每个值和array2
中的每个值。如果我理解正确,你只需要检查数组中相同位置的值,这意味着你应该删除第二个for-loop,像这样检查:如果(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(ry1,ry2);