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 に答える