我试图从文件中读取一堆数字并添加它们。但我在文件中也添加了一些字符串。我现在正在尝试读取数字将它们添加到一起并使用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
答案 0 :(得分:1)
首先,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!");
}
}
:
{{1}}
答案 1 :(得分:0)
答案 2 :(得分:0)
您需要将try / catch放在while循环中。
While(scan.hasNextLine()){
try{
x=scan.nextInt();
// add
}catch(InputMismatchException ime){
//write error
}
}