-4

Я пытаюсь прочитать кучу чисел из файла и добавить их. Но я добавил несколько строк в файл. Теперь я пытаюсь читать числа, добавляя их вместе и используя блок try/catch. Я пытаюсь отобразить ошибку, когда файл читает строку вместо целого. Однако, как только код считывает строку из файла, она дает мне ошибку, код не продолжает добавлять числа вместе. Он просто печатает ошибку и печатает 0. Как изменить ее так, чтобы она продолжала читать номера и добавлять их вместе, а также отображать сообщение об ошибке после того, как оно читает строку.Использование Try/Catch Block для определения строк в файле

Код:

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(); 
    } 


} 

} 

Содержимое файла

Albert 
10000 
20000 
30000 
Ben 
50000 
12000 
Charlie 
+0

просто добавить блок примерочных поймать внутри некоторое время вместо того, что вы делаете – Typo

+0

Добавить попробовать поймать вокруг х = scan.nextInt(); так что цикл продолжается – Ryan

+0

. Ваш ответ можно найти здесь: [Продолжить выполнение цикла после обнаружения исключения в try/catch] (http://stackoverflow.com/questions/13805008/continue-executing-loop-after-catching-an -exception-in-try-catch) – CubeJockey

ответ

0

Попробуйте прочитать строку в строку, а затем с помощью Integer.parseInt(x) и отлов, что, если он бросает исключение.

См Here для получения информации о Integer.parseInt()

+0

Вопрос заключается в продолжении цикла, если нужно исключить исключение – CubeJockey

1

Во-первых, try-catch блок помещен вне цикла while. В случае возникновения исключения управление достигает блока catch, который печатает сообщение об ошибке, а затем выходит из цикла. Вы должны поместить try-catch внутри цикла.

Во-вторых, когда Scanner#nextInt() выбрасывает исключение, Scanner не будет потреблять вход, вызывая бесконечный цикл в случае чтения недопустимого целого числа. Вы можете просто прочитать всю строку с помощью Scanner#nextLine() и разобрать его как 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

Вам нужно поставить попробовать/поймать внутри цикла.

While(scan.hasNextLine()){ 
    try{ 
     x=scan.nextInt(); 
     // add 
    }catch(InputMismatchException ime){ 
     //write error 
    } 
} 
Смежные вопросы