web-dev-qa-db-fra.com

comparaison d'éléments du même tableau dans java

J'essaie de comparer des éléments du même tableau. Cela signifie que je veux comparer l'élément 0 avec tous les autres éléments, l'élément 1 avec tous les autres éléments et ainsi de suite. Le problème est qu'il ne fonctionne pas comme prévu. . Ce que je fais, c'est que j'en ai deux pour les boucles qui vont de 0 à array.length-1 .. Alors j'ai une instruction if qui va comme suit: 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");
        }
    }
}

Tout d'abord, vous devez faire une boucle vers < a.length plutôt que a.length - 1. Comme cela est strictement inférieur à ce que vous devez inclure la limite supérieure.

Donc, pour vérifier toutes les paires d'éléments que vous pouvez faire:

for (int i = 0; i < a.length; i++) {
    for (int k = 0; k < a.length; k++) {
        if (a[i] != a[k]) {
            //do stuff
        }
    }
}

Mais cela va comparer, par exemple a[2] à a[3] puis a[3] à a[2]. Étant donné que vous vérifiez != cela semble inutile.

Une meilleure approche serait de comparer chaque élément i au reste du tablea:

for (int i = 0; i < a.length; i++) {
    for (int k = i + 1; k < a.length; k++) {
        if (a[i] != a[k]) {
            //do stuff
        }
    }
}

Donc, si vous avez les indices [1 ... 5] la comparaison irait

  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

Vous voyez donc que les paires ne sont pas répétées. Pensez à un cercle de personnes qui ont toutes besoin de se serrer la main.

40

Essayez ceci ou le but résoudra avec moins d'étapes

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

Vous pouvez commencer à partir de k = 1 et garder "a.length-1" dans la boucle for externe, afin de réduire deux comparaisons, mais cela ne fait aucune différence significative.

0
Sumedh