同じ配列の要素を比較しようとしています。つまり、0要素と他のすべての要素、1要素と他のすべての要素などを比較したいということです。問題は、意図したとおりに機能していないことです。 。私がしていることは、0からarray.length-1までの2つの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");
}
}
}
まず最初に、< 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 - 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");
}
}
}
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");
}
}
}
2つの比較を減らすために、k = 1から開始し、外側のforループに "a.length-1"を保持できますが、大きな違いはありません。