-4

Je tente de lire un ensemble de nombres à partir d'un fichier et de les additionner. Mais j'ai ajouté quelques chaînes dans le fichier aussi. J'essaie maintenant de lire les nombres les ajouter ensemble et en utilisant le bloc try/catch j'essaye d'afficher une erreur quand le dossier lit une chaîne au lieu d'un nombre entier. Cependant, dès que le code lit une chaîne à partir du fichier, il me donne l'erreur, le code ne continue pas à ajouter les numéros ensemble. Il imprime simplement l'erreur et imprime 0. Comment puis-je le modifier afin qu'il continue à lire les numéros et les ajouter ensemble ainsi que d'afficher un message d'erreur après qu'il lit une chaîne.Utilisation de Try/Catch Block pour identifier les chaînes dans un fichier

code:

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.InputMismatchException; 
import java.util.Scanner; 
public class AddNumbers { 

public static void main (String[]args) { 
    try{ 
     File myFile = new File("numbers.txt"); 
     Scanner scan = new Scanner(myFile); 

     int x; 
     int y = 0; 
     try{ 
      //Read file while it has a line 
      while(scan.hasNextLine()){ 
      //scan a integer value 
       x = scan.nextInt(); 
      //Add the scanned value to y 
       y = y+x; 
      } 
     }catch(InputMismatchException e){ 
      //If a string is found then print this error 
      System.err.println("Strings found! Error!"); 
     } 
     System.out.println(y); 
     scan.close(); 

    }catch(FileNotFoundException e){ 
     System.err.println("No such file exists!"); 
     System.out.println(); 
    } 


} 

} 

Contenu du fichier

Albert 
10000 
20000 
30000 
Ben 
50000 
12000 
Charlie 
+0

ajoutez simplement le bloc try-catch à l'intérieur du tout au lieu de ce que vous faites – Typo

+0

Ajouter une prise d'essai autour de x = scan.nextInt(); pour que la boucle continue – Ryan

+0

Votre réponse peut être trouvée ici: [Poursuivre l'exécution de la boucle après avoir attrapé une exception dans try/catch] (http://stackoverflow.com/questions/13805008/continue-executing-loop-after-catching-an -exception-dans-essayer-attraper) – CubeJockey

Répondre

0

Essayez de lire la ligne comme une chaîne, puis en utilisant Integer.parseInt(x) et capture que si elle lance une exception.

Voir Here pour des informations sur Integer.parseInt()

+0

La question est de continuer la boucle si une exception est levée – CubeJockey

1

Tout d'abord, le bloc try-catch est placé en dehors de la boucle while. En cas d'exception, le contrôle atteint le bloc catch qui imprime le message d'erreur, puis quitte la boucle. Vous devez placer le try-catch à l'intérieur de la boucle.

Deuxièmement, lorsque Scanner#nextInt() déclenche une exception, le Scanner ne consommerait pas l'entrée, provoquant une boucle infinie dans le cas où un entier invalide est lu. Vous pouvez tout simplement lire toute la ligne à l'aide Scanner#nextLine() et l'analyser comme int:

while (scan.hasNextLine()) { 
    try { 
     // scan a integer value 
     String line = scan.nextLine(); 
     x = Integer.parseInt(line); 
     // Add the scanned value to y 
     y = y + x; 
    } catch (NumberFormatException e) { // this can be thrown by Integer.parseInt(line) 
     // If a string is found then print this error 
     System.err.println("Strings found! Error!"); 
    } 
} 
0

Vous devez mettre le try/catch dans la boucle while.

While(scan.hasNextLine()){ 
    try{ 
     x=scan.nextInt(); 
     // add 
    }catch(InputMismatchException ime){ 
     //write error 
    } 
}