Partage
  • Partager sur Facebook
  • Partager sur Twitter

Petite question avec le equals

Sujet résolu
    8 février 2021 à 16:57:20

    Bonjour tout le monde, 

    Voilà je vous montre mon code et je vous pose la question après ...

    static void modification(Nation[] nat, int nbPays, String nomPays) { 
            boolean trouver = false;
            int indiceTrouvee = -1;
            if(nomPays.equals("CHINE")) {
                for(int i=0; !trouver && i < nbPays; i++) {
                    if(nat[i].getNom().equals("nomPays")) {
                        indiceTrouvee = i;
                        trouver = true;
                    } 
                }
                nat[indiceTrouvee].setCodeContinent('3');
            } 
            
        } 
    public static void main(String[] args) throws IOException {
            final int MAX_PAYS = 250; //Afficher les 15 premiers Pays
            Nation[] nat = new Nation[MAX_PAYS];
            int nbPays = lireRemplir("tp2_pays_e20.txt", nat);
            
            modification(nat, nbPays, "CHINE");
            //modification(nat, nbPays, "JAPON");
            
        }

    Voici le txt ; 

    2ETATS-UNIS                         WASHINGTON          9629047    291289535
    4CHINE                              PEKIN               9596960    1273111290
    5RUSSIE                             MOSCOU              17075400   143954573
    4AUSTRALIE                          CANBERRA            7686850    19834248
    3JAPON                              KYOTO               377835     12761000

    Bien. Voilà je souhaiterais changer le '4' (char) qui se trouve devant la CHINE par le '3'. Cependant, il ne le trouve pas dans mon tableau, if(nat[i].getNom().equals("nomPays")) ne fonctionne pas. Il trouve -1 donc comme-ci il n'existait pas. J'ai essayez le == et le equals mais je ne sais pas quoi faire de plus. Pouvez-vous m'aider s'il vous plait?

    Merci

    • Partager sur Facebook
    • Partager sur Twitter
      8 février 2021 à 17:03:51

      Salut,

      nat[i].getNom().equals("nomPays")

      le code veut dire si Nom est égale à nomPays. il faut supprimer les doubles quotes.

      nat[i].getNom().equals(nomPays)

      En fonction des besoins tu peux utiliser equalsIgnoreCase qui n'est pas sensible à la case.

      -
      Edité par rybla 8 février 2021 à 17:06:34

      • Partager sur Facebook
      • Partager sur Twitter
        8 février 2021 à 19:15:27

        Salut, 

        Merci pour ta réponse mais j'en encore le message d'erreur :"java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 250". Comme il ne le trouve pas il note -1 et me retourne se message d'erreur... Est-ce que tu as une idée de pourquoi?? Merci ☺️ 

        • Partager sur Facebook
        • Partager sur Twitter
          8 février 2021 à 20:07:08

          non mais tu peux debugger ton code pour trouver l'origine de l'erreur.

          "CHINE" est-il présent dans la liste ou la liste contient "4CHINE", "CHINE " ou une autre valeur.

          nat[indiceTrouvee].setCodeContinent('3');

          pourquoi ne pas faire le traitement dans le if

                  for(int i=0; !trouver && i < nbPays; i++) {
                      if(nat[i].getNom().equals(nomPays)) {
                          nat[i].setCodeContinent('3');
                          trouver = true;
                      }
                  }
                      



          • Partager sur Facebook
          • Partager sur Twitter
            8 février 2021 à 21:06:53

            Non Chine est présent dans la liste en tant que tel "CHINE". Si je le ferais dans le if mais j'ai séparé les éléments pour savoir précisément où se trouvait le bugg et enfaite le if ne s'active pas car il ne trouve pas l'égalité....
            • Partager sur Facebook
            • Partager sur Twitter
              8 février 2021 à 22:14:40

              Tu peux modifier comme ci-dessous (par exemple)

              for(int i=0; !trouver && i < nbPays; i++) {
              	Nation nation = nat[i];
              	String nom = nation.getNom();
              	if(nom.equals(nomPays)) {
              		nation.setCodeContinent('3');
              		trouver = true;
              	}
              }

              et faire du debug après ;)

              • Partager sur Facebook
              • Partager sur Twitter
                8 février 2021 à 22:43:00

                Je suis désolé de te dire que ça ne fonctionne pas non plus. Effectivement, je n'est plus de message d'erreur mais en revanche il n'y à pas eu le changement :(

                Contenu du tableau des nations des 15 premiers pays lus après la lecture du fichier:
                2 ETATS-UNIS                         WASHINGTON             9629047 291289535
                4 CHINE                              PEKIN                  9596960 1273111290
                5 RUSSIE                             MOSCOU                17075400 143954573
                4 AUSTRALIE                          CANBERRA               7686850 19834248
                3 JAPON                              KYOTO                   377835 12761000
                4 DES OURAGANS                       TEMPETE                      1    1
                5 ALLEMAGNE                          BERLIN                  357027 8253700
                5 FRANCE                             MARSEILLE               543964 61387038
                5 ITALIE                             ROME                    301230 57715620
                3 COREE DU SUD                       SEOUL                    99274 48324000
                5 ROYAUME-UNI                        LONDRES                 244101 58789194
                2 CUBA                               LA HAVANE               100860 11184023
                5 UKRAINE                            KIEV                    603700 48396470
                5 HONGRIE                            BUDAPEST                 93030 10106017
                5 ROUMANIE                           BUCAREST                238390 22272000
                
                
                Contenu du tableau des nations Après avoir fait les changement:
                2 ETATS-UNIS                         WASHINGTON             9629047 291289535
                4 CHINE                              PEKIN                  9596960 1273111290
                5 RUSSIE                             MOSCOU                17075400 143954573
                4 AUSTRALIE                          CANBERRA               7686850 19834248
                3 JAPON                              KYOTO                   377835 12761000
                4 DES OURAGANS                       TEMPETE                      1    1
                5 ALLEMAGNE                          BERLIN                  357027 8253700
                5 FRANCE                             MARSEILLE               543964 61387038
                5 ITALIE                             ROME                    301230 57715620
                3 COREE DU SUD                       SEOUL                    99274 48324000
                • Partager sur Facebook
                • Partager sur Twitter
                  8 février 2021 à 23:00:05

                  Au risque de me répéter. As-tu essayé de debugger la méthode et le equals afin de comprendre la raison du bug ? 

                  Si les méthodes equals et equalsIgnoreCase ne fonctionnent pas, alors tu ne compares pas "CHINE" avec "CHINE".  

                  Les méthodes modification et getNom ressemblent à quoi actuellement ?

                  -
                  Edité par rybla 8 février 2021 à 23:02:02

                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 février 2021 à 23:36:21

                    J'ai effectivement essayé de les debugger CHINE apparait bien comme tel. De plus j'ai créer de if pour justement rentrer au bon endroit et cela fonction. J'ai changé de méthode de comparaison, je suis passé avec des int et cela fonctionne ce n'est pas du tout ce que je veux mais tant que cela fonction...

                    public String getNom() {
                            return this.nom;
                    }
                    
                    public void setNom(String nom2) {
                            this.nom = nom2;
                    }



                    • Partager sur Facebook
                    • Partager sur Twitter
                      13 février 2021 à 15:21:52

                      Petit aparté, dans une condition, il est toujours préférable de tester en utilisant la notation Yoda (literal.equals(entrée)) pour gérer les cas null naturellement.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        13 février 2021 à 17:35:57

                        Comme nous venons de le voir en MP, getNom() ne retourne pas "CHINE" mais "CHINE                             "  d'où le problème avec la comparaison.

                        Pour résoudre rapidement ton problème, tu peux faire un appeler la méthode trim ou revoir la manière de lire ton fichier comme l'avais proposé Play50hz dans un autre topic.

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Petite question avec le 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