La comparaison de deux entiers tableaux en java
Je suis en train d'écrire du code pour comparer deux tableaux. Dans le premier tableau, j'ai mis mes propres chiffres, mais le second, le tableau prend numéros à partir du fichier d'entrée. La taille de ce tableau est déterminé par le premier nombre dans le fichier alors que le premier tableau est toujours de taille 10. La longueur doit être la même pour les deux tableaux ainsi que les numéros. 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;
}
}
}
}
- Et quel problème avez-vous?
- il ressemble à l'OP n'est pas de comparer les baies à tous. Il suffit de lire le code
- Quelle est la question? N'est-il pas de travail?
- il dosn fonctionne pas du tout lorsque les deux nombres sont de même il renvoie toujours false
- D'abord, vous devez définir comment allez-vous déterminer si deux matrice sont égales pour votre exercice: baie même longueur et de même, mais pas dans le même ordre, les différents tableau des longueurs mais les mêmes éléments (accepter les éléments répétés et pas dans le même ordre), les deux matrices de même longueur et de même les éléments au même endroit?
- C'est bien le code pour créer un hasard valeur booléenne, si. Que voulez-vous dire avec
the two numbers
? - Je ne sais pas si j'ai raison, mais je pense que cela ressemble à un exercice pour apprendre Java et les algorithmes. Depuis des OP dans la phase d'apprentissage, pourquoi les gens vont la voie de la facilité et de dire *utiliser le
Arrays#someFancyFunctionThatWontHelpYouToLearn
? Au lieu de cela, nous devrions nous concentrer sur l'aide aux OP pour 1. Comprendre le problème, et 2. Atteindre sa propre réponse. Donner un poisson à un pêcheur ne sera jamais aider à lui apprendre à pêcher. - Il n'est pas clair, si le retour de Méthode
true
même si le 2ème Tableau est plus grand que le 1er. - c'est ce que je demande dans mon commentaire
- êtes-vous vérifier si matrice2 contient matrice1? (êtes-vous vérifier s'il en est un sous-ensemble de l'autre?)
- La longueur des tableaux doit être la même et les nombres juste être la même partout(1er numéro dans les tableaux doivent être les sasme et ainsi de suite)
- Pour l'OP: Même s'il est quelque chose de facile comme
.equals
, je tiens à signaler DEUX erreurs que vous faites dans votre code. La première: quand vous allez à travers les tableaux, vous direb
esttrue
oufalse
. Ensuite, vous commencez à nouveau afin de vérifier, en raison de la boucle for. Mais à chaque fois que vous donnezb
une valeur. Donc, peu importe ce qui arrive, la valeurb
est défini, c'est toujours la valeur de la DERNIÈRE boucle for. La prochaine fois, ensembleboolean b = true
, si equal = true, ne rien faire, en cas d'égalité = false,b=false
. - Deuxièmement, vous êtes maintenant à la vérification de chaque valeur dans le tableau array1 avec chaque valeur dans le tableau2. Si je comprends bien, vous avez uniquement besoin de vérifier les valeurs au même endroit, dans le tableau, ce qui signifie que vous devriez avoir supprimé le deuxième boucle for et vérifier comme ceci:
if (array2[i] == array1[i])
. Ensuite, votre code doit fonctionner ainsi. - vous devez écrire une réponse au lieu de beaucoup de commentaires qui fournissent une réponse 🙂
- Mendoza votre droite, j'ai reçu votre commentaire après que j'ai commis la mine
- J'ai refait ma réponse à refléter tous les
Vous devez vous connecter pour publier un commentaire.
De ce que je vois vous essayez juste pour voir si elles sont égales, si cela est vrai, juste aller avec quelque chose comme ceci:
C'est la façon habituelle de faire.
Ops, il semble que les tableaux doivent également être triés pour être considérés comme égaux, de la java doc:
"Que deux ensembles sont égaux si les deux tableaux contiennent le même nombre d'éléments, et toutes les paires correspondantes des éléments dans les deux matrices sont égales. En d'autres termes, que deux ensembles sont égaux s'ils contiennent les mêmes éléments dans le même ordre"
Désolé pour le manque qui.
a={ 0, 1 }
etb={ 1, 0 }
. Ils sont totalement pas égal, mais de tri et de comparaison dirais que c'est. Ce que vous faites est de trouver, si il y a les mêmes éléments dans le tableau, mais c'est une autre chose.utilisation
Arrays.equals(ary1,ary2);
//retourne la valeur booléenneMODIFIER
vous pouvez utiliser
Arrays.deepEquals(ary1,ary2)
de comparer 2D tableaux ainsiégalement vérifier ce lien pour comparaison comparaison entre
Arrays.equls(ar1,ar2)
etArrays.deepEquals(ar1,ar2)
Java Les Tableaux.equals() renvoie la valeur false pour les deux dimensions des tableaux
EDIT 2
si vous ne voulez pas utiliser ces méthodes de bibliothèques, alors vous pouvez facilement mettre en place votre méthode comme ceci:
Si vous connaissez les tableaux sont de la même taille, il est sensiblement plus rapide pour trier puis de comparer
Si vous ne souhaitez pas modifier l'ordre des données dans les tableaux, puis faire une
System.arraycopy
premier.sort()
utilise quicksort avec une moyenne de2*n*ln(n)
comparaisons, whereaseequals()
nécessite justen
des comparaisons dans le pire de cas. Pour ne pas mentionner en fait la permutation des éléments. C'est beaucoup plus lentement, pas plus rapide, et même un optimal de tri radix serait plus lent.O(n^2)
. Celui-ci vérifie si les deux tableaux contiennent le éléments. Vous pouvez uniquement vérifier si les tableaux contiennent les mêmes éléments dans le même ordre dansO(n)
. Cela dépend de votre conception de l'égalité, mais votre suggestion et cette réponse de pas d'équivalent.Aucune des réponses impliquent l'utilisation d'un comparateur, et ne peut donc pas être utilisé dans des arbres binaires, ou pour le tri. Donc, je vais juste laisser ça ici:
int cmp = a.length - b.length;
pouvez retourner n'importe quel type int (mais 0), pas forcément 1 ou -1Vous pouvez consulter la matrice de l'égalité avec l'Apache Commons ArrayUtils#isEquals() méthode.
Même si il y a quelque chose de facile comme
.equals
, je tiens à signaler DEUX erreurs que vous faites dans votre code. La première: quand vous allez à travers les tableaux, vous direb
esttrue
oufalse
. Ensuite, vous commencez à nouveau afin de vérifier, en raison de la boucle for. Mais à chaque fois que vous donnezb
une valeur. Donc, peu importe ce qui arrive, la valeurb
est défini, c'est toujours la valeur de la DERNIÈRE boucle for. La prochaine fois, ensembleboolean b = true
,if equal = true
, ne rien faire,if equal = false
,b=false
.Deuxièmement, vous êtes maintenant à la vérification de chaque valeur dans
array1
avec chaque valeur dearray2
. Si je comprends bien, vous avez uniquement besoin de vérifier les valeurs au même endroit, dans le tableau, ce qui signifie que vous devriez avoir supprimé le deuxième boucle for et vérifier comme ceci:if (array2[i] == array1[i])
. Ensuite, votre code doit fonctionner ainsi.Votre code va fonctionner comme ceci:
}
Mais comme dit par d'autres, plus facile serait: les Tableaux.equals(ary1,ary2);
break
-déclaration. C'est en fait assez correct! Cela signifie que votre code a seulement 1 faille, et c'est la double boucle for.Basé sur ce commentaire, alors que vous avez déjà votre algorithme:
Vérifier si les deux tableaux ont la même longueur:
matrice1.longueur == tableau2.longueur
Le nombre doit être le même dans la même position:
matrice1[x] == tableau2[x]
Sachant cela, vous pouvez créer votre code comme ceci (ce n'est pas le code de Java, c'est un algorithme):
Remarque: votre fonction doit retourner un
boolean
, n'étant pas unvoid
, puis de récupérer la valeur de retour d'une autre variable et l'utiliser pour imprimer le message "vrai" ou "faux":null
-vérifierarray1
etarray2
Ici mon approche,il peut être utile à d'autres.
Par souci d'exhaustivité, vous devriez avoir une méthode qui peut vérifier tous tableaux: