比较java中相同数组的元素
我想比较同一个数组的元素。 这意味着我想要将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"); } } }
首先,你需要循环到< 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 -> 2
-
1 -> 3
-
1 -> 4
-
1 -> 5
-
2 -> 3
-
2 -> 4
-
2 -> 5
-
3 -> 4
-
3 -> 5
-
4 -> 5
所以你看到对不会重复。 想想一群人都需要互相握手。
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”,以减少两次比较,但这并没有产生任何显着差异。
尝试这个或目的将解决较少的步骤
for (int i = 0; i < a.length - 1; i++) { for (int k = i+1; k < a.length - 1; k++) { if (a[i] != a[k]) { System.out.println(a[i]+"not the same with"+a[k]+"\n"); } } }