Partage
  • Partager sur Facebook
  • Partager sur Twitter

Création d'une variable dans un bloc catch ?

    18 juillet 2016 à 19:45:01

     bonjour, jai un fichier texte tout bête avec des noms d'élèves et leurs notes :

    Olivier 12 9 15
    Laurent 14 6 14 
    Patrick 12 9 14

    Je veux simplement récupérer le nom de chacun et leurs notes. Admettons que je ne sache pas dans quel ordre se trouvent les données, si les notes sont avant le nom, l'inverse ou si tout est mélangé, je sais seulement que les données sont séparées par un espace.

    mon idée est de lire la ligne (line) , la séparer selon les espaces " " avec un

    StringTokenizer(line, " ")

    et je mets la première donnée dans une variable String donnee.

    ensuite mon idée est de faire un bloc try pour essayer de convertir la donnée en int. si ça marche, donnee est une note. sinon c'est le nom d'un étudiant, on a donc une exception qui nous envoie dans le bloc catch, et je pensais récupérer ce nom dans le catch en faisant nom = donnee.

    le problème c'est que j'ai l'impression que si je modifie la variable nom dans le catch, la modification ne sera pas pris en compte par le reste du programme. est-ce qu'il y a un autre moyen de faire ?

    public static void run(){
    
    
    
    		Path source = Paths.get("eleve.txt");
    
     try { BufferedReader reader = Files.newBufferedReader(source); String line = null; while ((line = reader.readLine()) != null){ //System.out.println(line); StringTokenizer st = new StringTokenizer(line, " "); String donnee ; String nom; int note; while (st.hasMoreTokens()){ donnee = st.nextToken(); try{ note = Integer.parseInt(donnee); }catch(NumberFormatException e){ nom = donnee; System.out.println("nom : " + nom); } } } }

     évidemment si je sais que le nom de l'étudiant  est la première valeur de la ligne, je n'ai pas besoin de me poser ces questions philosophiques, mais c'est que je suis débutant et je veux bien comprendre comment fonctionnent ces try catch

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      19 juillet 2016 à 1:38:03

      Bonjour,

      Si tu souhaites que ton fichier respecte une syntaxe bien précise, pourquoi ne pas utiliser une regex de ce style: ^\w{0,}\s(\d\s){3}$ ?

      Pour ce qui est du système de try/catch, tu trouveras certainement les réponses à tes questions ici.

      • Partager sur Facebook
      • Partager sur Twitter
        19 juillet 2016 à 12:43:31

        Bonjour,

        Tu as l'impression mais as-tu essayé ? Tu ne risques rien. :)

        • Partager sur Facebook
        • Partager sur Twitter
          19 juillet 2016 à 21:00:21

          oui je peux utiliser des formats mais c'était pas ma question

          oui quand je modifie nom dans le catch et que je l'imprime à la fin du programme, les modifs ne sont pas effectives

          • Partager sur Facebook
          • Partager sur Twitter
            20 juillet 2016 à 15:17:45

            J'ai jamais essayé d'utiliser le Catch pour ça et je ne te conseille pas d'essayer. Pour ce genre de situation tu ferais mieux de gérer la valeur de nom avec un ou plusieurs if. 

            Pour les explications du Try...Catch : 

            Dans ton try tu écris le code qui risque de déclencher une exception (pour une méthode "Division" tu peux écrire le code de la division dans le try et définir que ton Catch retourne un message si l’exception "Division par 0" est reconnu). 

            Pour ce qui est du catch on va dire qu'il interrompt l'exécution du programme et fait office de compte rendu (il va blablater sur ton exception si tu le lui demande).  

            • Partager sur Facebook
            • Partager sur Twitter
              20 juillet 2016 à 20:29:22

              le problème en faisant un if .. else c'est que si je mets le condition de mon code, c'est java qui va lancer une exception et mon code s'arretera

              moi je voudrais avoir un code qui fasse :

              String nom = "jean-mi";
              
              int note = 0;
              
              donnee = st.nextToken ;
              
               if tu peux convertir donnee en int alors fais le
              
              else convertis donnee en String";

              mon idée avec le try catch est :

              try (essaye de) convertir donnee en int , 
              
              si c'est ok, note = donnee
              
              si ce n'est pas possible --> va voir quoi faire dans le catch
              
              catch alors convertis donnee en String , nom = donnee ... et retourne dans le try pour la suite des opérations "

              Si je fais un System.out.println de nom à l'intérieur du catch ça a l'air de marcher, le nom prend bien les valeurs de mon fichier : théophile, albert ...,

              je réussis à récupérer toutes les notes parfait !

              par contre à la fin de la lecture du ficher, que donne System.out.println(nom) ?  théophile ou albert ?  non c'est "jean-mi"

              ça veut dire que nom est restée à sa valeur d'initialisation et que les modifications qui ont eu lieu dans le catch ont été oubliées ...

              j'espère que je ne vous donne pas trop mal à la tête avec mes ratiocinations en ce beau mois de juillet

              -
              Edité par reynal 20 juillet 2016 à 20:34:59

              • Partager sur Facebook
              • Partager sur Twitter
                23 juillet 2016 à 12:19:41

                Je suis pas ultra au point avec les try..catch mais tu peux tenter un truc par rapport aux exceptions... Je regarde ça et si je trouve une technique pour répondre à ton besoin je te tiens au courant. Si entre temps tu trouves quelque chose n'hésite pas à venir nous le dire :)
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  23 juillet 2016 à 17:27:23

                  Bonjour,

                  Pour éclaircir un peu la chose:

                  Si tu souhaites gérer la conversion de ta donnée, il ne faut pas utiliser de try/catch.

                  Les try/catch sont là pour rattraper une erreur, pas pour faire des opérations sur le code défectueux.

                  EDIT: Et les try/catch ne sont pas là non plus pour servir de structures conditionnelles...

                  -
                  Edité par Anonyme 23 juillet 2016 à 17:49:22

                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 juillet 2016 à 15:25:52

                    D'ou mon précédent message à propos de la structure conditionnel dans le try (genre du code normal quoi...). Mais y a pas un moyen de déclencher une méthode si on chope une exception? 

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      24 juillet 2016 à 19:46:15

                      Bonjour,

                      >D'ou mon précédent message à propos de la structure conditionnel dans le try (genre du code normal quoi...). Mais y a pas un moyen de déclencher une méthode si on chope une exception?

                      Si l'erreur est bloquante, tu ne pourras rien faire du tout.

                      Dans tout les cas, tu peux très bien conserver un booléen qui servira de "signal", au cas où l'erreur n'est pas bloquante comme ceci:

                      try
                      {
                          //do something
                      }catch(Exception e)
                      {
                          an_error_was_occurred = true;
                          e.printStackTrace();
                      }
                      

                      Mais, de toute façon, si l'erreur est sévère, la JVM crashera quoi qu'il arrive.

                      EDIT: En revanche, tu peux très bien faire des tests avec le mot-clé finally pour savoir quoi faire en cas d'exception. Les instructions contenues dans ses accolades seront toujours exécutées avant que la JVM ne rende l'âme.

                      -
                      Edité par Anonyme 24 juillet 2016 à 19:49:27

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Création d'une variable dans un bloc catch ?

                      × 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