web-dev-qa-db-ja.com

javaで同じ配列の要素を比較する

同じ配列の要素を比較しようとしています。つまり、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. 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

ペアが繰り返されていないことがわかります。お互いに握手をする必要のある人々の輪を考えてください。

40

これを試すか、目的が少ないステップで解決します

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");
        }
    }
}
1
cooldude
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"を保持できますが、大きな違いはありません。

0
Sumedh