Использование блока Try/Catch для идентификации строк в файле
Я пытаюсь прочитать набор чисел из файла и сложить их. Но я также добавил несколько строк в файл. Сейчас я пытаюсь прочитать числа, сложить их вместе и используя блок try / catch. Я пытаюсь отобразить ошибку, когда файл читает строку вместо целого числа. Однако, как только код читает строку из файла, он выдает ошибку, код не продолжает складывать числа вместе. Он просто печатает ошибку и печатает 0. Как изменить ее так, чтобы она продолжала считывать числа и складывать их вместе, а также отображать сообщение об ошибке после чтения строки.
Код:
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
3 ответа
Во-первых, 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!");
}
}
Попробуйте прочитать строку как строку, а затем с помощью Integer.parseInt(x)
и поймать это, если он выбрасывает исключение.
Смотрите здесь для получения информации о Integer.parseInt()
Вы должны поместить try/catch внутри цикла while.
While(scan.hasNextLine()){
try{
x=scan.nextInt();
// add
}catch(InputMismatchException ime){
//write error
}
}