如何在不使用 .equals 和假布尔值的情况下比较数组



我必须在不使用 .equals 方法的情况下比较数组,目前程序运行正常,除非我有两个变量,例如

int[] y = {8,8,8};
int[] z = {8,8,9};

我的程序说这是真的,而它应该说它是假的。以下是我的比较数组代码:

if (arrayOne.length == arrayTwo.length) {
for (int i = 0; i < arrayOne.length; i++) {
if (arrayOne[i] == arrayTwo[i]) {
return true;
}
}
}
return areEqual;

我必须使用boolean areEqual = false并在最后返回它。

不要在它们相等时立即返回,而是检查是否存在不平等,如果有,则return false。如果for循环完成而不返回,那么您可以安全地return true.

if (arrayOne.length == arrayTwo.length) {
for (int i = 0; i < arrayOne.length; i ++) {
if (arrayOne [ i ] != arrayTwo [ i ] ) {
return false; 
}
}
return true;
}
return false;

@Mayhem的答案是正确的。我只是想让你展示一种更干净的方法(通过删除if嵌套(:

if (arrayOne.length != arrayTwo.length) {
return false;
}
for (int i = 0; i < arrayOne.length; i ++) {
if (arrayOne [ i ] != arrayTwo [ i ] ) {
return false; 
}
}
return true;

一旦找到一对匹配的元素,您就会返回 true,并且永远不会更新areEqual。你需要继续前进,直到找到一对相等的元素,或者到达数组的末尾。

相反,使用areEqual变量来告诉您是否发现了使它们不相等的东西 - 任何东西。一旦你发现了使它们不平等的东西,你就不需要再检查了:

boolean areEqual = false;  // Redundant assignment; but meh, if you've got to use this...
areEqual = arrayOne.length == arrayTwo.length;
for (int i = 0; areEqual && i < arrayOne.length; ++i) {
areEqual = arrayOne[i] == arrayTwo[i];
}
return areEqual;

相关内容

最新更新