【问题标题】:How to compare arrays without using .equals and with a false boolean如何在不使用 .equals 和错误布尔值的情况下比较数组
【发布时间】:2018-10-12 15:26:33
【问题描述】:

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

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

我的程序说这是真的,但它应该说它是假的。以下是我的 CompareArrays 代码:

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 并在最后返回它。

【问题讨论】:

  • 你好 Andrew,这很简单,每当你检查时,第一次迭代你已经返回 true,你不需要等待第二次迭代
  • 我该如何纠正?

标签: java arrays boolean compare


【解决方案1】:

当它们相等时不要立即返回,而是检查不等式,如果有,则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;

【讨论】:

【解决方案2】:

@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;

【讨论】:

  • !== 不是 Java 运算符)
  • 已编辑,以为我用 javascript 过滤了问题;)
  • 是的,这正是我的意思。您避免了 if 的嵌套,这通常很棘手。
【解决方案3】:

一旦找到匹配的元素对,您就会返回 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;

【讨论】:

  • 有人愿意分享他们不喜欢这种方法的什么地方吗?
  • 我必须有 boolean areEqual = false。我不能改变它
  • @AndrewDeWitt 你去吧。
  • @AndyTurner 感谢您的帮助。这种方式也有效。我不确定谁不喜欢它。我只是第一次看到混乱
猜你喜欢
  • 1970-01-01
  • 2016-05-05
  • 2014-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-17
  • 2021-09-29
  • 1970-01-01
相关资源
最近更新 更多