【问题标题】:comparing elements of the same array in java在java中比较同一数组的元素
【发布时间】:2014-05-04 19:06:51
【问题描述】:

我正在尝试比较同一数组的元素。这意味着我想将 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");
        }
    }
}

【问题讨论】:

    标签: java arrays compare elements between


    【解决方案1】:

    首先,您需要循环到&lt; 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 -&gt; 2
    2. 1 -&gt; 3
    3. 1 -&gt; 4
    4. 1 -&gt; 5
    5. 2 -&gt; 3
    6. 2 -&gt; 4
    7. 2 -&gt; 5
    8. 3 -&gt; 4
    9. 3 -&gt; 5
    10. 4 -&gt; 5

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

    【讨论】:

    • "这意味着我想将 0 元素与其他所有元素进行比较,将 1 元素与其他所有元素进行比较,依此类推。"如果他真的想要更好的方法可能没有用^
    • @Sumedh 我的第一个例子就是这样做的。我详细说明,鉴于 OP 所做的比较,这可能不是最好的方法。
    • 非常感谢你:)
    • @MarkKnol 这就是练习的全部要点 - 当然你需要它。 OP 正在检查每对元素中的 non equal 元素。为什么?只有 OP 知道这一点。
    • @MarkKnol 它不是 i != k 它是 a[i] != a[k] - 即 数组值 不相等,而不是索引。
    【解决方案2】:

    试试这个,否则用更少的步骤就能解决问题

    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");
            }
        }
    }
    

    【讨论】:

    • 你根本没有考虑最后一个元素......它应该是内部循环中的“a.length”
    【解决方案3】:
    for (int i = 0; i < a.length; i++) {
        for (int k = 0; k < a.length; k++) {
            if (a[i] != a[k]) {
                System.out.println(a[i] + " not the same with  " + a[k + 1] + "\n");
            }
        }
    }
    

    您可以从 k=1 开始并在外部 for 循环中保留“a.length-1”,以减少两次比较,但这并没有任何显着差异。

    【讨论】:

      【解决方案4】:

      试试下面的代码。此逻辑将有助于比较数组的元素。

          int[] arr= {1,7,22,55,22,6,6,7};
          
          for (int i = 0; i < arr.length; i++) {
              for (int j = i+1; j < arr.length; j++) {
                  if(arr[i]==arr[j])
                  {                   
                      System.out.print(arr[i] + " ");
                  }
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多