如何检查两个数组中的所有元素是否相同?
如果所有值都相同,如何使它返回true
?
我尝试了不同的方法,但没有成功。
答案 0 :(得分:4)
可能尝试这样的事情:
public static boolean checkIdentical(int[][] targetArray) {
for (int i = 1; i < targetArray.length; i++) {
for (int j = 0; j < targetArray[i].length; j++) {
if (targetArray[i][j] != targetArray[0][j]) {
return false;
}
}
}
return true;
}
注意:
如果数组可以具有这样的可变长度:
int[][] identicalArray = {{3, 3, 3, 4}, {3, 3, 3}};
那么条件将是:
if (targetArray[i].length != targetArray[0].length
|| targetArray[i][j] != targetArray[0][j]) {
return false;
}
答案 1 :(得分:4)
您可以使用Arrays.equals()方法在单个循环中进行操作。
public static boolean checkIdentical(int[][] targetArray) {
int[] prev = null;
for (int[] a : targetArray) {
if (prev != null && !Arrays.equals(a, prev))
return false;
prev = a;
}
return true;
}
需要导入java.util.Arrays。
答案 2 :(得分:1)
这里可能的解决方案:
public static void main(String[] args) {
int[][] identicalArray = { { 3, 3, 3 }, { 3, 3, 3 } };
int[][] nonIdenticalArray = { { 1, 2, 3 }, { 3, 2, 1 } };
System.out.println("identicalArray all identical? " + checkIdentical(identicalArray));
System.out.println("nonIdenticalArray all identical? " + checkIdentical(nonIdenticalArray));
}
public static boolean checkIdentical(int[][] targetArray) {
int[] array1 = targetArray[0];
for(int[] array : targetArray) {
if (!Arrays.equals(array1, array))
return false;
}
return true;
}
checkIdentical
中会发生什么:
targetArray
targetArray
的第一个一维数组存储在array1中。这将是我们的参考数组,我们将与targetArray
targetArray
中的每个一维数组,并将其与array1
进行比较array1
不匹配,请返回false
true
希望这会有所帮助。
答案 3 :(得分:0)
您可以使用Stream API和Arrays#equals
编写优美的1行checkIdentical
:
public static boolean checkIdentical(int[][] targetArray) {
return Stream.of(targetArray).allMatch(elm -> Arrays.equals(targetArray[0], elm));
}