Problème de compréhension avec les exeptions

Résolu
jerome38920 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   -  
jerome38920 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

j'ai un problème concernant les initialisation avec les utilisations des exceptions.
j'ai besoin d'utiliser un variable de type "Test t1" tout au long de ma méthode, cependant je dois l'initialiser dans un try{} catch]().
comme dans l'exemple qui suit:


Test t1;
      System.out.println("*** PREPARER UN TEST ***");
      try{
         do{             
            System.out.print("Nom du test : ");
            nomText=Clavier.lireString();
            if(nomText.length()<5 || nomText.length()>50){
               System.out.println("ERREUR ! Entrez un nom contenant entre 5 et 50 caracteres. Recommencez..."); 
            }
         }while(nomText.length()<5 || nomText.length()>50 ); // a mettre en cst globale
         t1 = new Test(nomText);                 //1er initialisation de t1
      }catch(TestInvalideException e){
         System.out.print("pas mis de nom ou c'est null :"); 
      }
      
      try{
         
          for(int i=0 ; i<nbrQuest ; i++){
             do{
               System.out.println("Enonce :");
               enonce=Clavier.lireString();
               if(enonce.length()<10 || enonce.length()>120){
                  System.out.println("ERREUR ! L'enonce doit contenir entre 10 et 120 caracteres. Recommencez..."); 
               }
            }while(enonce.length()<10 || enonce.length()>120);
            t1.ajouterQuestion(new Question("Enonce 1", 
                     new String[]{"choix1Q1", "choix2Q1", "choix3Q1"}, 1, 0));   //message d'erreur: variable t1 might not have been 
                                                                                                                          // initialized
         }
      }catch(TestInvalideException e){
         System.out.print("Nom du test :"); 
      }catch(QuestionInvalideException e){
         System.out.print("Nom du test :"); 
      }




Mon problème si situe au niveau de l'initialisation de t1, j'ai déjà initialise t1 dans mon premier try{} catch(), pourquoi est ce que je dois encore le réinitialiser dans mon second try catch?

Merci de vos réponse.
A voir également:

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

Si
t1 = new Test(nomText);
provoque une exception, t1 ne sera pas initialisée.
Donc tu ne devrais pas pouvoir faire
t1.ajouterQuestion()
dans ce cas, et Java t'en empêche.
En effet ici ta première question n'ayant pas été résolue, partir sur la suite serait erroné.

Remarque : il ne faut pas perdre les exceptions.
"pas mis de nom ou c'est null :"
ne permet pas de connaître le détail de la
TestInvalideException e
que tu as catché.
Il faudrait au minimum faire un
"pas mis de nom ou c'est null :" + e
(pour bénéficier du e.toString) même si un
e.printStackTrace()
serait plus complet.
0
jerome38920 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
je comprend que si
t1 = new Test(nomText);
provoque une exemption, t1 ne sera pas initialisé, j'ai oublier de mettre dans cet exemple
nomText="jerome";
, et à ce moment, je suis sur que
t1 = new Test(nomText);
ne provoque pas d’exception. Cependant, il me demande toujours d'initialisé t1 dans mon second try catch.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > jerome38920 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
Le compilateur n'est pas capable de deviner que "jerome" ne provoquera pas d'exception.
Et s'il en était capable il te dirait que le try/catch est inutile et te demanderait de l'enlever.
Java voit juste que la méthode peut terminer de deux manières différentes (avec ou sans exception) et que dans un des deux cas la variable ne sera pas initialisée...
0
jerome38920 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
ok merci beaucoup
0