Partage
  • Partager sur Facebook
  • Partager sur Twitter

Méthode equals

comparaison de deux points

Sujet résolu
    26 janvier 2012 à 16:13:51

    Bonjour,

    J'essaye depuis une heure d'écrire une petite méthode equals qui doit comparer les abscisses et ordonnées de deux points et retourner true s'ils sont égaux.

    Le message d'erreur est Static Error: Undefined name 'equals', alors que la méthode est bien définie dans la classe...

    Voilà le code:

    public class Point {
      public double x;
      public double y;
      
      public Point () {
        this.x = 0;
        this.y = 0;
      }
      
      public Point (double a, double b) {
        this.x = a;
        this.y = b;
      }
      
      public double abscisse() {
        return this.x;
      }
      
      public double ordonnee() {
        return this.y;
      }
      
      public boolean equals (Point p) {
       return ((this.x == p.x)) && (this.y == p.y) );
      }
       
      }
    


    Je sais bien que le p.x et p.y sont faux, mais mettre this.x == abscisse(p) me renvoie un message d'erreur disant que je n'ai pas le droit d'utiliser abscisse() dans ma méthode...

    Merci pour votre aide.
    • Partager sur Facebook
    • Partager sur Twitter
      26 janvier 2012 à 16:17:50

      Ça serait plutôt x==p.abscisse().


      Attention, si tu veux redéfinir la méthode equals de Object, ce n'est pas equals(Point p) mais equals(Object o)

      http://java.developpez.com/faq/java/?p [...] DIVERS_equals
      • Partager sur Facebook
      • Partager sur Twitter
        26 janvier 2012 à 16:23:49

        Citation : Javier

        Ça serait plutôt x==p.abscisse().


        Attention, si tu veux redéfinir la méthode equals de Object, ce n'est pas equals(Point p) mais equals(Object o)

        http://java.developpez.com/faq/java/?p [...] DIVERS_equals



        Merci pour ta réponse.

        La compilation ne donne pas d'erreur, c'est déjà ça !

        Mais comment utiliser la méthode equals? Car equals (p2) n'a pas de sens juste comme ca (et ne donne rien)
        (En ayant bien sur défini 2 points égaux)
        • Partager sur Facebook
        • Partager sur Twitter
          26 janvier 2012 à 16:31:20

          Aïe, t'as pas bien compris certains concepts de base.

          Une méthode d'instance (toutes les méthodes non déclarées "static") est invoquée sur un objet.

          Point p1 = new Point();
          Point p2 = new Point();
          System.out.println(p1.equals(p2));
          
          • Partager sur Facebook
          • Partager sur Twitter
            26 janvier 2012 à 16:33:30

            Je sais bien mais le problème c'est qu'on a pas encore vu le System.out.println :p

            Donc je pense qu'il doit bien y avoir un moyen, non?
            • Partager sur Facebook
            • Partager sur Twitter
              26 janvier 2012 à 16:35:20

              Un moyen pourquoi faire ? o_O
              • Partager sur Facebook
              • Partager sur Twitter
                26 janvier 2012 à 16:36:33

                Pour vérifier qu'un point p2 a les même coordonnées qu'un point p1 :)
                • Partager sur Facebook
                • Partager sur Twitter
                  26 janvier 2012 à 16:46:08

                  déjà il y a probleme là : return ((this.x == p.x)) && (this.y == p.y) );
                  t'as une parenthèse en trop.
                  @Javier, dit moi si je me trompe mais si tu déclare une méthode equals avec un type spécifique sans surcharger, lorsque tu appellera cette méthode sur ton objet en lui passant en paramètre un objet du même type cela doit fonctionner il me semble, non?
                  Après vérification, c'est bien le cas, tu déclarer une méthode equals qui prend un type particulier en parametre, mais dans ce cas tu ne peut pas faire @Override.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 janvier 2012 à 16:55:31

                    @Seddisoft : Et bien fais-en ce que tu en veux de cette méthode, dans mon exemple j'ai affiché le résultat dans la console (System.out.println(...)) mais tu peux par exemple t'en servir dans un if() (si p1 est égal à p2 alors ...)


                    @ninlock : Oui bien sûr cela fonctionnera.
                    J'ai "pris les devants" en pensant que ce qu'on voulait lui faire faire (le coup classique de la classe Point) était de redéfinir la méthode equals de la classe Object.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      26 janvier 2012 à 17:17:27

                      Ah ok.
                      Par contre j'ai l'impression que le vrai plantage vient de la parenthèse en trop, d'ailleur tu peut même l'écrire avec encore moins de parenthèse:
                      return (this.x == p.x && this.y == p.y);
                      
                      • Partager sur Facebook
                      • Partager sur Twitter
                        26 janvier 2012 à 18:23:24

                        Citation

                        Je sais bien mais le problème c'est qu'on a pas encore vu le System.out.println :p



                        Dans ce cas y a un problème dans ton cursus d'apprentissage o_O ! System.out.println() sert simplement à afficher un message à l'éran, c'est la première chose que tu apprends dans un langage... ?!
                        • Partager sur Facebook
                        • Partager sur Twitter
                        ⚙️ Une solution simple règle le problème ; une solution compliquée en crée un nouveau.
                        Anonyme
                          26 janvier 2012 à 18:34:03

                          Citation : ninlock


                          @Javier, dit moi si je me trompe mais si tu déclare une méthode equals avec un type spécifique sans surcharger, lorsque tu appellera cette méthode sur ton objet en lui passant en paramètre un objet du même type cela doit fonctionner il me semble, non?
                          Après vérification, c'est bien le cas, tu déclarer une méthode equals qui prend un type particulier en parametre, mais dans ce cas tu ne peut pas faire @Override.



                          Ca fonctionne en temps que méthode classique comme n'importe quelle autre, mais pas en temps que méthode utilisée par l'API java, tout ce qui est Collection, par exemple, va utiliser equals(Object) et donc complètement ignorer ton implémentation equals(monType).
                          • Partager sur Facebook
                          • Partager sur Twitter
                            26 janvier 2012 à 19:03:15

                            @shakhal Seulement si tu as un type indéfini dans ta liste, si ta liste est Typé il appel bien l'equals en tant que méthode au sens ou tu l'entend. Mais equals est bien une méthode de la même manière la question est de savoir si je me préoccupe de mon Type d'objet ou pas.
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              26 janvier 2012 à 19:11:58

                              Citation : ninlock

                              @shakhal Seulement si tu as un type indéfini dans ta liste, si ta liste est Typé il appel bien l'equals en tant que méthode au sens ou tu l'entend. Mais equals est bien une méthode de la même manière la question est de savoir si je me préoccupe de mon Type d'objet ou pas.



                              non, equals(MyType) est une surcharge de equals(Object), pas une redéfinition, aucune classe de l'api java ne va utiliser l'equals que tu as crée, à la place ce sera la version valide la plus proche dans la hiérarchie qui sera utilisée (Object.equals dans le pire des cas).
                              • Partager sur Facebook
                              • Partager sur Twitter
                                26 janvier 2012 à 20:45:22

                                Hello,

                                Bah en fait ca marche en faisant p1.equals(p2) en fin de compte, ce qui m'arrange très bien.

                                Je vous remercie tous pour votre aide, bonne soirée! ;)
                                • Partager sur Facebook
                                • Partager sur Twitter

                                Méthode equals

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown