web-dev-qa-db-fra.com

Comparer deux tableaux d'entiers en java

J'essaie d'écrire du code pour comparer deux tableaux. Dans le premier tableau, j'ai mis mes propres chiffres, mais dans le second, le tableau prend des chiffres dans le fichier d'entrée. La taille de ce tableau est déterminée par le premier nombre du fichier alors que le premier tableau est toujours de taille 10. La longueur doit être identique pour les deux tableaux, ainsi que pour les nombres. Mon code est ci-dessous:

public static void compareArrays(int[] array1, int[] array2) {
    boolean b = false;
    for (int i = 0; i < array2.length; i++) {

        for (int a = 0; a < array1.length; a++) {

            if (array2[i] == array1[a]) {
                b = true;
                System.out.println("true");
            } else {
                b = false;
                System.out.println("False");
                break;
            }
        }
    }       
}
21
user2052514
public static void compareArrays(int[] array1, int[] array2) {
        boolean b = true;
        if (array1 != null && array2 != null){
          if (array1.length != array2.length)
              b = false;
          else
              for (int i = 0; i < array2.length; i++) {
                  if (array2[i] != array1[i]) {
                      b = false;    
                  }                 
            }
        }else{
          b = false;
        }
        System.out.println(b);
    }
19
slawter

D'après ce que je vois, vous essayez simplement de voir s'ils sont égaux. Si cela est vrai, procédez comme suit:

boolean areEqual = Arrays.equals(arr1, arr2);

C'est la façon habituelle de le faire.

Ops, il semble que les tableaux doivent également être triés pour être considérés comme égaux, à partir du document Java:

"Deux tableaux sont considérés égaux si les deux tableaux contiennent le même nombre d'éléments et si toutes les paires d'éléments correspondantes dans les deux tableaux sont égales. En d'autres termes, deux tableaux sont égaux s'ils contiennent les mêmes éléments dans le même ordre"

Désolé d'avoir raté ça.

62
comanitza

utilisation 
Arrays.equals(ary1,ary2);/ retourne une valeur booléenne

_/ _ modifier _
vous pouvez aussi utiliser Arrays.deepEquals(ary1,ary2) pour comparer les tableaux 2D

vérifiez également ce lien pour la comparaison entre Arrays.equls(ar1,ar2) et Arrays.deepEquals(ar1,ar2)

Java Arrays.equals () renvoie false pour les tableaux à deux dimensions

EDIT 2
si vous ne voulez pas utiliser ces méthodes de bibliothèque, vous pouvez facilement implémenter votre méthode comme ceci:

public static boolean ArrayCompare(int[] a, int[] a2) {
    if (a==a2)   // checks for same array reference
        return true;
    if (a==null || a2==null)  // checks for null arrays
        return false;

    int length = a.length;
    if (a2.length != length)  // arrays should be of equal length
        return false;

    for (int i=0; i<length; i++)  // compare array values
        if (a[i] != a2[i])
            return false;

    return true;
}
32
exexzian

Si vous savez que les tableaux ont la même taille, il est manifestement plus rapide de les trier, puis de comparer

Arrays.sort(array1)
Arrays.sort(array2)
return Arrays.equals(array1, array2)

Si vous ne souhaitez pas modifier l'ordre des données dans les tableaux, effectuez d'abord un System.arraycopy.

7
Boris the Spider

Aucune des réponses existantes n'implique l'utilisation d'un comparateur et ne peut donc pas être utilisée dans les arbres binaires ni pour le tri. Donc je vais juste laisser ça ici:

public static int compareIntArrays(int[] a, int[] b) {
    if (a == null) {
        return b == null ? 0 : -1;
    }
    if (b == null) {
        return 1;
    }
    int cmp = a.length - b.length;
    if (cmp != 0) {
        return cmp;
    }
    for (int i = 0; i < a.length; i++) {
        cmp = Integer.compare(a[i], b[i]);
        if (cmp != 0) {
            return cmp;
        }
    }
    return 0;
}
2
etherous

Même s'il y a quelque chose de simple comme .equals, j'aimerais souligner deux erreurs que vous avez commises dans votre code. La première: lorsque vous parcourez les tableaux, vous dites que b est true ou false. Ensuite, vous recommencez à vérifier, à cause de la boucle for. Mais chaque fois que vous donnez une valeur à b. Donc, peu importe ce qui se passe, la valeur que b obtient est toujours la valeur de LAST for-loop. La prochaine fois, définissez boolean b = true, if equal = true, ne faites rien, if equal = false, b=false.

Deuxièmement, vous vérifiez maintenant chaque valeur dans array1 avec chaque valeur dans array2. Si je comprends bien, il vous suffit de vérifier les valeurs au même emplacement dans le tableau, ce qui signifie que vous devriez avoir supprimé la deuxième boucle for et vérifier comme ceci: if (array2[i] == array1[i]). Ensuite, votre code devrait également fonctionner.

Votre code fonctionnerait comme ceci:

public static void compareArrays(int[] array1, int[] array2) {
    boolean b = true;
    for (int i = 0; i < array2.length; i++) {
        if (array2[i] == array1[i]) {
            System.out.println("true");
        } else {
            b = false;
            System.out.println("False");
        }
    } 
    return b;

}

Mais comme dit par d'autres, plus facile serait: Tableaux.équaux (ary1, ary2);

1
Joetjah

La longueur des tableaux doit être identique et les numéros identiques (le premier chiffre dans les tableaux doit être le sasme, etc.).

Basé sur ce commentaire, alors vous avez déjà votre algorithme:

  1. Vérifiez si les deux tableaux ont la même longueur:

    array1.length == array2.length

  2. Les numéros doivent être les mêmes dans la même position:

    tableau1 [x] == tableau2 [x]

Sachant cela, vous pouvez créer votre code comme ceci (ce n'est pas du code Java, c'est un algorithme):

function compareArrays(int[] array1, int[] array2) {

    if (array1 == null) return false
    if (array2 == null) return false

    if array1.length != array2.length then return false

    for i <- 0 to array1.length - 1
        if array1[i] != array2[i] return false

    return true
}

Remarque: votre fonction devrait renvoyer une boolean, n'étant pas une void, puis récupérer la valeur de retour dans une autre variable et l'utiliser pour imprimer le message "true" ou "false":

public static void main(String[] args) {
    int[] array1;
    int[] array2;
    //initialize the arrays...
    //fill the arrays with items...
    //call the compare function
    boolean arrayEquality = compareArrays(array1, array2);
    if (arrayEquality) {
        System.out.println("arrays are equals");
    } else {
        System.out.println("arrays are not equals");
    }
}
1
Luiggi Mendoza

Vous pouvez vérifier l'égalité du tableau avec la méthode Apache Commons ArrayUtils # isEquals () .

1
tstorms

Ici, mon approche peut être utile à d’autres.

public static void compareArrays(int[] array1, int[] array2) {
    if (array1.length != array2.length)
    {
           System.out.println("Not Equal");
    }
    else
    {
        int temp = 0;
        for (int i = 0; i < array2.length; i++) {  //Take any one of the array size
            temp^ = array1[i] ^ array2[i];   //with help of xor operator to find two array are equal or not                 
        }
        if( temp == 0 )
        {
             System.out.println("Equal");
        }
        else{
             System.out.println("Not Equal");
        }
    }
}
0
Nayagam