我必须在不使用 .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;