Partage
  • Partager sur Facebook
  • Partager sur Twitter

Méthode equals

Sujet résolu
    22 mai 2012 à 13:31:40

    Bonjour !

    J'ai un problème avec la condition suivante :

    if(joueurActuel.getPosJoueur() == 1 && (!damier[xCaseDépart][yCaseDépart].equals("b") || !damier[xCaseDépart][yCaseDépart].equals("B")))
    			return false;
    


    Il me retourne faux alors qu'il ne doit normalement pas executer l'instruction.

    En effet getPosJoueur renvoi bien 1 et et damier[xCaseDépart][yCaseDépart] renvoi bien un string "b"...

    Des idées ?
    • Partager sur Facebook
    • Partager sur Twitter
      22 mai 2012 à 13:41:51

      Bonjour,
      Si "damier[xCaseDépart][yCaseDépart] renvoi bien un string "b" " comme tu l'indiques,
      Alors
      (!damier[xCaseDépart][yCaseDépart].equals("b") || !damier[xCaseDépart][yCaseDépart].equals("B"))
      

      renverra true. (false || true).
      Par conséquent ton if ressemblera à : (true && (false ||true)) càd true!
      D'où ton return false ;)
      • Partager sur Facebook
      • Partager sur Twitter
        22 mai 2012 à 13:43:28

        En vrac :
        • Ton histoire de damier qui peut contenir une lettre en majuscule ou minuscule me semble cacher un problème de conception
        • Les String ont une méthode .equalsIgnoreCase(String)
        • En général on préfère un "Yoda-test" dans ce genre de cas, pour se prémunir des NullPointerException :
          String s = getMyString();
          // Risque de NPE si s est null :
          s.equals("X");
          // Aucun risque de NPE quel que soit s,
          // Renverra false si s est null :
          "X".equals(s);
          


        D'autre part, damier[xCaseDépart][yCaseDépart] renvoie "b", qui n'est pas "B" donc tu valides la dernière condition.
        En réalité, tu renvoies "false" si :
        • getPosJoueur vaut 1
        • et damier[xCaseDépart][yCaseDépart] n'est pas "b" ou n'est pas "B"

        Or si damier[xCaseDépart][yCaseDépart] est "b" il n'est pas "B" et inversement. Le deuxième membre du "ou" est toujours vrai.
        Donc ton test peut se résumer à :
        if(joueurActuel.getPosJoueur() == 1 && (true))
        

        Donc :
        if(joueurActuel.getPosJoueur() == 1)
        


        Ce que tu veux se résume à :
        return joueurActuel.getPosJoueur() != 1 || "b".equalsIgnoreCase(damier[xCaseDépart][yCaseDépart])
        
        • Partager sur Facebook
        • Partager sur Twitter
          22 mai 2012 à 13:48:27

          Merci beaucoup! Cela m'a beaucoup aidé ;):):D
          • Partager sur Facebook
          • Partager sur Twitter
            22 mai 2012 à 13:52:13

            Pense à indiquer que le sujet est résolu ;)
            • 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