0

我正在尝试使用以下代码从文本文件中读取一系列变量:

public static Book readBook(String pathname) throws IOException, InputMismatchException {
        Scanner fl = new Scanner (new FileInputStream (fn));
        int num = fl.nextInt();
        double thePrice = 0;
        String theAuthor = null;
        String theTitle = null;
        for (int i=0; i<=num; i++) {
            theTitle = fl.nextLine();
            theAuthor = fl.nextLine();
            thePrice = fl.nextDouble();
        }
        System.out.print(num);
        System.out.print(theTitle);
        System.out.print(theAuthor);
        fl.close();
        return new Book(theTitle, theAuthor, thePrice);
       }

File 包含一个用于 while 循环的数字,用于说明需要多少遍。文件如下所示:

2
name
author
10.00
name2
author2
12.00

但这会引发输入不匹配错误,由于某种原因将第一行读取为“name2”,从而弄乱了顺序并在代码达到双精度时导致错误。任何帮助,将不胜感激!

堆栈跟踪:

Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at java.util.Scanner.nextDouble(Unknown Source)
    at Model.readBook(Model.java:36)
4

1 回答 1

1

当您调用 fl.nextInt() 或 fl.nextDouble() 时,对 fl.nextLine() 的以下调用实际上不会读取“下一行”。相反,它只是完成读取包含 int 或 double 值的行上剩余的“字符”(或“行分隔符”)。因此,在这种特定情况下,您需要在 for 循环的开头添加一个额外的 fl.readLine()。

另外,你会想说“ i<num”而不是“ i<=num”,否则你会得到一个不同的错误。

本质上,使 for 循环的开始和第一行如下:

 for (int i=0; i<num; i++) {
    fl.nextLine();
.....
.....
于 2013-02-20T19:39:35.573 回答