2015-10-12 4 views
0

J'essaye de comprendre comment continuer un code même après qu'une exception soit attrapée. Imaginez que j'ai un fichier texte rempli de chiffres. Je veux que mon programme lise tous ces chiffres. Maintenant, disons qu'il y a une lettre mélangée dedans, est-ce possible que l'exception soit attrapée, et alors le code continue la boucle? Aurais-je besoin de l'essayer et attrape dans une boucle do-while? S'il vous plaît, donnez-moi vos idées, je l'apprécierais grandement. J'ai fourni mon code juste au cas où:Pourquoi mon programme Java se ferme-t-il après la capture d'une exception?

NewClass newInput = new NewClass(); 
    infile2 = new File("GironEvent.dat"); 
    try(Scanner fin = new Scanner (infile2)){ 
     /** defines new variable linked to .dat file */ 
     while(fin.hasNext()) 
     { 
      /** inputs first string in line of file to variable inType */ 
      inType2 = fin.next().charAt(0); 
      /** inputs first int in line of file to variable inAmount */ 
      inAmount2 = fin.nextDouble(); 

      /** calls instance method with two parameters */ 
      newInput.donations(inType2, inAmount2); 
      /** count ticket increases */ 
      count+=1; 
     } 
     fin.close(); 
    } 
    catch (IllegalArgumentException ex) { 
       /** prints out error if exception is caught*/ 
       System.out.println("Just caught an illegal argument exception. "); 
       return; 
      } 
    catch (FileNotFoundException e){ 
     /** Outputs error if file cannot be opened. */ 
     System.out.println("Failed to open file " + infile2 ); 
     return; 

    } 
+1

Vous pouvez placer un bloc try-catch à l'intérieur de la boucle, où le bloc catch enregistre uniquement l'erreur et passe à l'itération suivante de la boucle. – t0mppa

Répondre

3

Déclarez votre bloc try-catch dans votre boucle, de sorte que la boucle peut se poursuivre en cas d'exception. Dans votre code, Scanner.nextDouble lancera InputMismatchException si le jeton suivant ne peut pas être traduit en une valeur double valide. C'est cette exception que vous voudriez attraper dans votre boucle.

0

Oui, je mettrais votre try/catch dans votre boucle while, bien que je pense que vous devriez supprimer votre déclaration de retour.

0

Oui. Ces gars-là ont raison. Si vous placez votre try-catch dans la boucle, l'exception restera "à l'intérieur" de la boucle. Mais de la façon dont vous l'avez maintenant, lorsqu'une exception est levée, l'exception "sortira" de la boucle et continuera jusqu'à ce qu'elle atteigne le bloc try/catch. Comme si:

try     while 
    ^
    | 
    while   vs  try 
    ^     ^
    |      | 
Exception thrown  Exception thrown 

Dans votre cas, vous voulez deux try/blocs catch: pour ouvrir le fichier (en dehors de la boucle), et un autre pour la lecture du fichier (dans la boucle).

0

Si vous voulez continuer après la capture exception:

  1. Supprimer déclaration de retour lorsque vous rencontrez une exception.

  2. Attraper toutes les exceptions possibles à l'intérieur et à l'extérieur pendant la boucle puisque votre bloc de capture actuel attrape seulement 2 exceptions. Jetez un oeil à des exceptions possibles avec l'API Scanner.

  3. Si vous souhaitez continuer après tout type d'exception, capturez une autre exception générique. Si vous voulez quitter en cas d'exception générique, vous pouvez mettre en retour en l'attrapant.