Tableau [][] : vérifier qu'il n'y a pas de ligne identique - Java - Programmation
Marsh Posté le 13-03-2009 à 21:20:19
Hello,
Débutant en Java, je ne pense pas qu'il faille comparer les valeurs de cette manière. Si tu fais tab[0] == tab2[0], tu cherches à savoir si les variables pointent sur la même adresse. Pour moi si tu veux comparer les 2 valeurs, tu dois faire tab[0].equals(tab2[0]) là il va te retourner true.
Je pense que des personnes confirmées pourront affirmer ou infirmer cela.
Cordialement,
Redfield
kakashii a écrit : Salut!
|
Marsh Posté le 13-03-2009 à 22:28:12
Tout dépend de quoi est le tableau. Si ce sont des types primitifs, il faut utiliser ==. Si ce sont des objets, il faut utiliser .equals.
Sinon, pour l'algo: si le tableau est petit (disons N < 100 lignes), des boucles imbriquées iront. S'il est grand, la complexité est en O(N^2). Un algo simple est alors de faire un tri des lignes (il faut trouver une relation d'ordre entre les lignes rapide) et de repérer d'éventuels doublons en comparant les lignes successives 2 à 2. Pour la comparaison entre 2 lignes, il faut évidemment quitter au premier élément qui diffère.
Marsh Posté le 13-03-2009 à 22:28:44
Hello!Plusieurs remarques:
1) Ton indice "k" n'a pas besoin de varier de 0 à n-2, il devrait plutôt aller de (i+1) à (n-1).
2) La logique de ton "if" n'est pas la bonne. Ton booléen "test" va devenir "true" dès qu'un seul nombre est identique dans les deux lignes que tu compares. Ce n'est pas bon car tu veux que "test" devienne "true" si et seulement si tous les entiers sont identiques. Il faudrait plutôt faire l'inverse: au début, tu supposes que les lignes seront identiques, et "test" va devenir "false" dès qu'un seul nombre est différent dans les deux lignes.
3) Il faudra penser à réinitialiser "test" à chaque nouvelle comparaison de deux lignes.
Marsh Posté le 14-03-2009 à 09:50:34
el muchacho a écrit : Tout dépend de quoi est le tableau. Si ce sont des types primitifs, il faut utiliser ==. Si ce sont des objets, il faut utiliser .equals. |
ce sont des double en fait
merci pour vos remarques
post_it j'ai modifié un peu le code avec ce que t'as dis, apparemment pour l'instant ça marche toujours pas
Code :
|
c'est bizarre, ca marche toujours pas ! Pourtant ça parait bon
Marsh Posté le 14-03-2009 à 13:08:06
J'ai mis un affichage et ça marche pas, je comprend pas la
Code :
|
edit : apres quelques tests encore, ça marche seulement quand les lignes se suivent !
Marsh Posté le 14-03-2009 à 15:15:33
Je pense qu'il faut déplacer la ligne "test=true;"
Code :
|
Marsh Posté le 14-03-2009 à 15:40:08
Ah oui bien vu!
Je vous remercie ! Ca a l'air de marcher parfaitement
Marsh Posté le 16-03-2009 à 09:29:20
Il y a une méthode pour comparer 2 tableaux de booléens dans la classe java.util.Arrays : equals(double[] a, double[] a2)
Comme précisé, ça n'utilise pas == pour comparer les valeurs : pour bien gérer les valeurs NaN et -0.0d, ça créé des instances de Double donc c'est plus gourmand.
Si dans ton cas, tu n'as pas ces cas particuliers, il vaut mieux garder ta méthode
Marsh Posté le 13-03-2009 à 19:32:22
Salut!
Je cherche à faire une petite fonction qui vérifiera qu'il n'y ai pas de lignes identiques dans un tableau à 2 dimensions.
Par exemple si tab[0] == tab[2] ou tab[0] == tab[1]... ca renvoie un booléen true
je réfléchis depuis un moment et j'arrive pas à trouver, malgré des for et encore des for...
j'ai fais ca pour l'instant
n c'est la taille du tableau (tableau carré tab[n][n])
Quelqu'un a une idée ?