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

Langage Java Discussion :

[Language]equals()


Sujet :

Langage Java

  1. #1
    Paulinho
    Invité(e)
    Par défaut [Language]equals()
    Bonjour!

    J'ai la classe suivante:
    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
    public class Golden_goal_match extends Cup_match{
     
    	private
     
            int time; // Variável que especifica o tempo em que foi marcado o golo de ouro.
     
        public
     
        Golden_goal_match() {super(); time = 0;}
        Golden_goal_match(String c1, String c2, int s1, int s2, int e1, int e2, int t) {super(c1, c2, s1, s2, e1, e2); time = t;}
     
        public int get_time() {return time;}
     
        public String toString() { // Método que devolve o resultado de jogos com prolongamento especificando o minuto em que foi marcado o golo de ouro.
     
        String str = "";
     
        str = get_club1() + " venceu o jogo " + get_club1() + " : " + get_club2() + " por " + get_ext1() + " : " + get_ext2() + " com golo de ouro no minuto " + get_time() + " . ";
     
        return str;
     
        }
    }
    Il me faut utiliser la function equals ici mais je ne vois pas où puisse-je l'insérer parce que ici je n'ai pas d'égalités...

    Merci d'avance.

    [ Modéré par Bulbo ]
    Ajout d'un tag dans le titre
    Les Règles du Forum

  2. #2
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Pourquoi faut-il que tu utilises equals ?
    Equals est directement hérité de la super classe object. Il faut simplement la surcharger parce que par défaut elle compare deux références et non pas deux valeurs.

    Pour ce faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    public class Golden_goal_match extends Cup_match{ 
    .....
           boolean equals(Golden_goal_match pGgm){
             .....
             return true/false;
          }
    ....
    }
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  3. #3
    Membre actif Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Points : 205
    Points
    205
    Par défaut
    'jour,
    si tu veux surcharger equals, il vaut mieux utiliser la même signature il me semble.

    Un truc comme ça quoi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	public boolean equals(Object _object){
    		if (!(_object instanceof MaClass))
    			return false;
    		//Traitement d'égalité champs par champs
    		//return true or false
    	}
    "Ils ne savaient pas que c'était impossible... alors ils l'ont fait." Mark Twain

  4. #4
    Membre actif Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Points : 266
    Points
    266
    Par défaut
    Citation Envoyé par vincent63
    'jour,
    si tu veux surcharger equals, il vaut mieux utiliser la même signature il me semble.

    Un truc comme ça quoi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	public boolean equals(Object _object){
    		if (!(_object instanceof MaClass))
    			return false;
    		//Traitement d'égalité champs par champs
    		//return true or false
    	}
    Nope, ça ça s'appelle l'overhidding, pas la surcharge ;-)

  5. #5
    Membre actif Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Points : 205
    Points
    205
    Par défaut
    Nope, ça ça s'appelle l'overhidding, pas la surcharge
    Jamais entendu parlé d'overhidding... mais j'te fais confiance.
    Quoi qu'il en soit, n'est-il quand même pas plus judicieux d'"overhidder"... plutôt que de redéfinir une méthode equals avec un paramètre typé?

    Si je ne me trompe pas, la méthode equals (Object) est appelée par défaut dans certains cas (ie. utilisation des map).

    Celle qui prend en paramètre un objet typé doit être explicitement appelée.

    Alors autant en faire une qui convienne à toutes les situations.
    D'autant plus (cf Java efficace, mais je n'ai pas la page en tête) que cela fait parti des recommandations pour développer en Java.
    "Ils ne savaient pas que c'était impossible... alors ils l'ont fait." Mark Twain

  6. #6
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par vincent63
    Nope, ça ça s'appelle l'overhidding, pas la surcharge
    Jamais entendu parlé d'overhidding... mais j'te fais confiance.
    Un post où l'on parle de cela : [Traduction] Overload et Override en français ?.

    Grosso-modo :
    • overload = surcharge = une méthode avec le même nom mais des paramètres différents.
    • override = "redéfinition" = une méthode redéfinit dans une classe fille (mais avec la même signature).



    Citation Envoyé par vincent63
    Si je ne me trompe pas, la méthode equals (Object) est appelée par défaut dans certains cas (ie. utilisation des map).
    Sinon il est en effet préférable d'utiliser la version avec un Object en paramètre, et donc de "redéfinir"...

    a++

  7. #7
    Paulinho
    Invité(e)
    Par défaut
    J'ai fait cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public boolean equals(Golden_goal_match g){ 
            if (!(g instanceof Cup_match)) 
            return false;
            //Traitement d'égalité champs par champs 
            //return true or false 
     
         }
    et l'éditeur dit cela:
    This method must return a result of type boolean
    Mais n'est-ce pas cela qu'il fait??

  8. #8
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Tu n'as pas de clause else, du coup il est possible que ta methode ne retourne rien, ce que le compilo refuse.

    Ajoute une clause else avec un return, ou un return true a la fin de la methode.

    [Edit]
    Change le type de ton parametre pour etre Object, c'est tout de meme mieux
    [/Edit]

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  9. #9
    Paulinho
    Invité(e)
    Par défaut
    Ok, je fait cela:
    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 Golden_goal_match extends Cup_match{
     
    	private
     
            int time; // Variável que especifica o tempo em que foi marcado o golo de ouro.
     
        public
     
        Golden_goal_match() {super(); time = 0;}
        Golden_goal_match(String c1, String c2, int s1, int s2, int e1, int e2, int t) {super(c1, c2, s1, s2, e1, e2); time = t;}
     
        public int get_time() {return time;}
     
        public boolean equals(Golden_goal_match g){ 
            if (!(g instanceof Cup_match)) 
            { return false;}
            //Traitement d'égalité champs par champs 
            //return true or false 
            else return true;
         } 
     
     
        public String toString(Golden_goal_match g) { // Método que devolve o resultado de jogos com prolongamento especificando o minuto em que foi marcado o golo de ouro.
     
        String str = "";
     
        str = get_club1() + " venceu o jogo " + get_club1() + " : " + get_club2() + " por " + get_ext1() + " : " + get_ext2() + " com golo de ouro no minuto " + get_time() + " . ";
     
        return str;
     
        }
    }
    Mais à quoi ça sert dans cette classe la methode equals? Elle n'influencie pas toString. Dans la console on obtien le même résult(correct, d'ailleurs). Quelqu'un sait s'il existe ici une utilité pour utiliser cette methode?

    Merci.

  10. #10
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    1 - tu n'as jamais mentionne pourquoi tu voulais implementer la methode equals donc difficile de te dire pourquoi ca devrait influencer le resultat d'un toString()

    2 - equals est une methode qui teste l'egalite de deux objets tout simplement. Comme toString() est une methode retournant la representation de l'objet sous forme de chaine de caracteres.

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  11. #11
    Membre actif Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Points : 205
    Points
    205
    Par défaut
    Si tu veux traiter de l'égalité entre deux élements, il ne suffit pas de tester leur appartenance à une même classe (ce n'est qu'une première étape).

    Le instanceOf permet de savoir si se sont deux objets disons comparables (pour faire simple).

    Dans ton else, il faut comparer tous les attributs des tes deux objects :
    this. champs1 comparé à g.champs1
    etc...
    S'ils sont tous égaux (en fonction de tes besoins), on peux dire que les objects sont égaux et tu retournes true... Si deux champs diffèrent, il faut retourner false.
    "Ils ne savaient pas que c'était impossible... alors ils l'ont fait." Mark Twain

  12. #12
    Paulinho
    Invité(e)
    Par défaut
    J'ai fait ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public boolean equals(Golden_goal_match g){ 
            if (!(g instanceof Cup_match)) 
            { return false;}
            //Traitement d'égalité champs par champs 
            //return true or false 
            else {return get_time() == g.get_time();}
         }
    Ok. Mais a quoi me sert ici qu'il me sort true ou false, s'il ne modifie pas la sortie du code? Je n'utilise pas la valeur de equals...

    Merci.

  13. #13
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Paulinho
    Mais a quoi me sert ici qu'il me sort true ou false,
    Simplement de savoir si deux objet sont égaux ou pas...

    Citation Envoyé par Paulinho
    s'il ne modifie pas la sortie du code? Je n'utilise pas la valeur de equals...
    Je ne comprend pas trop... tu pourrais être plus clair sur ce que tu veux faire ?

    a++

  14. #14
    Paulinho
    Invité(e)
    Par défaut
    Mon prof de POO (il est allemand)nous a dit d'utiliser la methode equals dans cette classe mais je ne comprends pas le motif. Il a donné seulement un exemple et voilá, quite a découvrir le reste.

    Merci.

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Points : 84
    Points
    84
    Par défaut
    Peut être faut il comparer les différents attributs de l'instance de ta classe avec ceux ce l'objet en paramètre ?

    Rendre True s'ils sont égaux et false sinon.

    Je pense que tu peux aller plus loin en implémentant le equals au niveau de tes classe mères.

    Puis dans les classes filles, tu le réimplémentes en appelant la méthode de ta classe mère super.equals et en rajoutant les tests sur les nouveaux attributs.


    Arnaud

  16. #16
    Membre actif Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Points : 205
    Points
    205
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str = get_club1() + " venceu o jogo " + get_club1() + " : " + get_club2() + " por " + get_ext1() + " : " + get_ext2() + " com golo de ouro no minuto " + get_time() + " . ";
    En fait, si j'ai bien compris ton code, dans le toString(), tu affiches des informations sur 2 clubs (getClub1 et getClub2).

    En fait, ton test d'égalité pourrait reposer sur l'idée que club 1 et club 2 doivent être différents.

    Un tuc genre SI club1.egal(club2) faire ceci
    SINON faire cela...
    Et là intervient ton egal.
    Non?
    "Ils ne savaient pas que c'était impossible... alors ils l'ont fait." Mark Twain

  17. #17
    Membre actif Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Points : 205
    Points
    205
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str = get_club1() + " venceu o jogo " + get_club1() + " : " + get_club2() + " por " + get_ext1() + " : " + get_ext2() + " com golo de ouro no minuto " + get_time() + " . ";
    En plus, si je peux me permettre, il serait préférable de faire qque chose comme ceci :

    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
    	public toString() {
    		StringBuffer buffer = new StringBuffer();
    		buffer.append(get_club1());
    		buffer.append(" venceu o jogo ");
    		buffer.append(get_club1());
    		buffer.append(" : ");
    		buffer.append(get_club2());
    		buffer.append(" por ");
    		buffer.append(get_ext1());
    		buffer.append(" : ");
    		buffer.append(get_ext2());
    		buffer.append(" com golo de ouro no minuto ");
    		buffer.append(get_time());
    		buffer.append(" . ");
    		return buffer.toString();
    	}
    C'est plus sain.
    "Ils ne savaient pas que c'était impossible... alors ils l'ont fait." Mark Twain

  18. #18
    Paulinho
    Invité(e)
    Par défaut
    Oui, c'est vrai.

    Est-ce que je pouvais faire quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if (get_time().equals(0)){
     
        str = get_club1() + " venceu o jogo " + get_club1() + " : " + get_club2() + " por " + get_ext1() + " : " + get_ext2() + " com golo de ouro no minuto " + get_time() + " . ";
     
        } else {return str = " O tempo tem de ser superior à 90 minutos ";}
     
        return str;
     
        }
    pourquoi je ne puisse pas faire get_time().equals(0) et get_club1().equal(get_club2()) marche bien?

    Merci encore.

  19. #19
    Membre actif Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Points : 205
    Points
    205
    Par défaut
    J'ai dans l'idée que ton get_time retourne un entier, egal n'a donc ici aucun intérêt, il suffit d'uiliser

    J'aurai plutôt vu un truc du genre
    SI NOT get_club1().equal(get_club2()) ALORS AFFICHER TON STRING
    SINON RETURN NULL;

    En clair, l'affichage n'a d'intérêt que si les deux club sont différents. S'il s'agit du même club, on ne renvoie rien.

    Mais bon, là, c'est du fonctionnel, à toi de me dire si le toString a un intérêt lorsque club1 = club2...
    "Ils ne savaient pas que c'était impossible... alors ils l'ont fait." Mark Twain

  20. #20
    Paulinho
    Invité(e)
    Par défaut
    Merci je fait comme tu as dit.

    Je demandé à mon prof d'insérer dans la page web du cours un programme utilisant equals. Le voilà:
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    public class Pair implements Comparable
    {
        private double l;
        private double r;
     
        public Pair()
        { l=0; r=0; }
     
        public Pair(double left, double right)
        { l=left; r=right; }
     
        public double get_left()
        { return l; }
     
        public double get_right()
        { return r; }
     
        public void set_left(double i)
        { l=i; }
     
        public void set_right(double j)
        { r=j; }
     
        public String toString() 
        { return "(" + l + "," + r + ")";}
     
        /* Implementation alternative
     
        public boolean equals(Object other)
        {	Pair o = (Pair)other;
    	return (l == o.get_left() && r == o.get_right()); }
     
        */
     
        public boolean equals(Pair other)
        {
    	return (l == other.get_left() && r == other.get_right()); }
     
        public int compareTo(Object o) 
       {   Pair other = (Pair) o;
    	if ((l < other.get_left()) || ((l == other.get_left()) && (r < other.get_right()))) {return -1;}
    	else if ((l == other.get_left()) && (r == other.get_right())) {return 0;}
    	else { return 1; }
        }
    }
    Ici je comprends mais pas dans mon code... Ici il compare des pairs et dans mon code il n'a rien à comparer sauf les clubs!

    Merci.

Discussions similaires

  1. [Language] Redéfinition de la méthode equals
    Par nak dans le forum Langage
    Réponses: 2
    Dernier message: 08/12/2005, 08h56
  2. [postgresql] Probleme de language SQL
    Par sbucci dans le forum Requêtes
    Réponses: 3
    Dernier message: 31/05/2003, 13h19
  3. Language
    Par bidson dans le forum XMLRAD
    Réponses: 4
    Dernier message: 10/05/2003, 19h28
  4. [Appli][Autre language]dll-contenant form
    Par flash dans le forum Langage
    Réponses: 6
    Dernier message: 20/09/2002, 14h18
  5. je veux apprendre la programmation quel language choisir??
    Par existance dans le forum Débuter
    Réponses: 26
    Dernier message: 06/08/2002, 05h32

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