IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Comparer 2 tableaux d'objets


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 82
    Par défaut Comparer 2 tableaux d'objets
    Bonjour,

    je cherche à tester l'égalité entre 2 tableaux d'objets mais je n'arrive pas.
    ps: je ne cherche pas à comparer l'adresse mémoire mais seulement les valeurs.

    Voici le code de ma classe diagonale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    public class Diagonale{
     
        /**
         * Nombre de trous sur la diagonale.
         */
    	private int nbTrous;
     
     
        /**
         * Type de gravure.
         */
        protected Gravure gravure;
     
     
        /**
         * Type enumere representant les differentes types de gravure.
         */
        public enum Gravure {
        	        SansGravure,
    		Fine,
    		Moyenne,
    		Large
         }
     
        /**
         * Constructeur
         */
    	public Diagonale() {
    		this.nbTrous = 0;
    		this.gravure = Gravure.SansGravure;
    	}
    }
    Voici le main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public static void main(String[] args) {
     
    		Diagonale[] diagonale = new Diagonale[4];
    		for (int i = 0; i < 4; i++) {
    			diagonale[i] = new Diagonale();
    		}
     
    		Diagonale[] diagonale2 = new Diagonale[4];
    		for (int i = 0; i < 4; i++) {
    			diagonale2[i] = new Diagonale();
    		}
    		System.out.println(java.util.Arrays.equals(diagonale,diagonale2));
    }
    Cela me renvoie toujours false alors que j'ai juste instancié 2 tableaux sans modifier les attributs gravure,nbtrous de mes diagonales.

    Merci pour vos réponses.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Java ne peut pas deviner que tu veux comparer les deux attributs gravure et nbTrous. Ça pourrait être d'autres attributs, ou alors un seul des deux. Il va pas deviner.
    Comme il ne cherche pas à deviner, Java a une méthode très simple pour déterminer si deux objets sont égaux : il appelle leur méthode equals().

    Supposons donc que tu aies deux objets Diagonale : Diagonale a et Diagonale b. Pour déterminer s'ils sont égaux, on appelle a.equals(b) et on regarde si ça fait true ou false.

    Ta méthode Diagonale ne définit pas de méthode public boolean equals(Object o), et c'est ça ton problème. Il en faut une, sinon la comparaison n'est pas intéressante.
    Si une classe ne redéfinit pas equals(), elle hérite du equals() de la classe Object. Et la méthode equals() de la classe object ne renvoie true que si les deux variables pointent vers un seul et même objet (ce que tu appelles "comparaison d'adresses" : les deux adresses sont les mêmes.)

    Voir dans la FAQ : Pourquoi et comment redéfinir la méthode equals() ?

    À noter que quand on redéfinit la méthode equals(), il faut aussi redéfinir la méthode hashCode() en conséquence.
    (La FAQ date un peu. Depuis Java 1.7 ça peut se faire très simplement. Dans ton cas : )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @Override
    public int hashCode() {
      return Objects.hash(nbTrous, gravure);
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/01/2007, 17h15
  2. [Tableaux] Comparer 2 tableaux
    Par lama85 dans le forum Langage
    Réponses: 3
    Dernier message: 08/08/2006, 15h19
  3. [Collections]Tableaux d'objets uniques.
    Par Invité dans le forum Collection et Stream
    Réponses: 30
    Dernier message: 22/03/2006, 13h20
  4. comparer deux tableaux
    Par djibril dans le forum Langage
    Réponses: 4
    Dernier message: 15/11/2005, 15h26
  5. delete[] seulement pour des tableaux d'objets?
    Par Crisanar dans le forum C++
    Réponses: 7
    Dernier message: 22/10/2005, 19h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo