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

8

我正在尝试比较同一数组的元素。这意味着我想将第0个元素与每个其他元素进行比较,将第1个元素与每个其他元素进行比较,依此类推。但问题是它没有按预期工作。我有两个for循环,从0到array.length-1。然后,我有一个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");
        }
    }
}
5个回答

54

首先,您需要循环至<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

可以看到,没有重复的配对。想象一下需要互相握手的人围成一个圆。


这意味着我想将第0个元素与每个其他元素进行比较,第1个元素与每个其他元素进行比较,以此类推。如果他真的想要,更好的方法可能不会有用。 - Sumedh
@Sumedh 我的第一个例子正是这样做的。我详细说明了,鉴于 OP 所做的比较,这可能不是最佳方法。 - Boris the Spider
1
@MarkKnol 这就是练习的全部“重点”——当然你需要它。OP正在检查每一对元素是否为“非相等”的元素。为什么?只有OP知道。 - Boris the Spider
1
@MarkKnol,这里不是 i != k,而是 a[i] != a[k] - 即 数组值 不相等,而不是索引。 - Boris the Spider
啊,当然这就是区别所在。我假设数组已经是唯一的了。 - Mark Knol
显示剩余3条评论

1

尝试这个方法,目的可以用更少的步骤解决

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"。 - Sumedh

0

我该如何比较a[i]的值与a[a+1]和a[a-1]的值,以及底部索引(相关k)的值?以确定当前索引的值是否小于其所有其他邻居的值。

for (int i = 0; i < a.length; i++) {
    for (int k = 0; k < a.length; k++) {
        if (a[i] < a[i+1]) && (a[i] < a[i-1]) )  {
            int b = a[i]
        }
    }
}    
   for (int i = 0; i < a.length; i++) {
    for (int k = 0; k < a.length; k++) {
        if (a[k] < a[k+1]) && (a[k] < a[k-1]) )  {
            int c = a[k]
        }
    }
}      

0
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”,以减少两个比较,但这并没有产生任何显著的差异。


-2

尝试下面的代码。这个逻辑将帮助比较数组元素。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接