在java中比较同一数组的元素

新手上路,请多包涵

我正在尝试比较同一数组的元素。这意味着我想将 0 元素与其他所有元素进行比较,将 1 元素与其他所有元素进行比较,依此类推。问题是它没有按预期工作。 .我所做的是我有两个从 0 到 array.length-1 的 for 循环。然后我有一个 if 语句,如下所示: if(a[i]!=a[j+1])

 for (int i = 0; i < a.length - 1; i++) {
    for (int k = 0; k < a.length - 1; k++) {
        if (a[i] != a[k + 1]) {
            System.out.println(a[i] + " not the same with  " + a[k + 1] + "\n");
        }
    }
}

原文由 no-Name-Is-Still-A-Name 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 715
2 个回答

首先,您需要循环到 < a.length 而不是 a.length - 1 。因为这严格小于您需要包含的上限。

因此,要检查您可以执行的所有元素对:

 for (int i = 0; i < a.length; i++) {
    for (int k = 0; k < a.length; k++) {
        if (a[i] != a[k]) {
            //do stuff
        }
    }
}

但这将比较,例如 a[2]a[3] 然后 a[3]a[2] 。鉴于您正在检查 != 这似乎很浪费。

更好的方法是将每个元素 i 与数组的其余部分进行 比较:

 for (int i = 0; i < a.length; i++) {
    for (int k = i + 1; k < a.length; k++) {
        if (a[i] != a[k]) {
            //do stuff
        }
    }
}

因此,如果您有索引 [1…5],则比较会进行

  1. 1 -> 2
  2. 1 -> 3
  3. 1 -> 4
  4. 1 -> 5
  5. 2 -> 3
  6. 2 -> 4
  7. 2 -> 5
  8. 3 -> 4
  9. 3 -> 5
  10. 4 -> 5

所以你看到对没有重复。想想一圈人都需要互相握手。

原文由 Boris the Spider 发布,翻译遵循 CC BY-SA 3.0 许可协议

试试这个或目的将用更少的步骤解决

for (int i = 0; i < a.length; i++)
{
    for (int k = i+1; k < a.length; k++)
    {
        if (a[i] != a[k])
         {
            System.out.println(a[i]+"not the same with"+a[k]+"\n");
        }
    }
}

原文由 cooldude 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题