0

テキスト ファイルを読み込もうとしていますが、「java.util.InputMismatchException」が発生し続けます。

メインクラス:

dc.loadData(new File("DVDCollection.txt"));

ファイル データを読み取り/ロードするクラス:

Scanner inputFile = null;
public void loadData(File fileName) {
    try {
        inputFile = new Scanner (new File("DVDCollection.txt"));
    }

    catch (Exception FileNotFoundException) {
        System.out.println("ERROR: " + FileNotFoundException.getMessage());
        System.exit(1);
    }

    while (inputFile.hasNext()) {

        String fileTitle = inputFile.nextLine();
        String fileCategory = inputFile.nextLine();
        String fileRunningTime = inputFile.nextLine();
        int fileYear = inputFile.nextInt();
        double filePrice = inputFile.nextDouble();

        DVD dvdEntry = new DVD(fileTitle, fileCategory, fileRunningTime, fileYear, filePrice);
        DVDlist.add(dvdEntry);
    }
    inputFile.close();
}

テキスト ファイルには、1 行に 1 つの情報が含まれており、改行はありません。

例:

Movie title1 (Sttring)
movie category1 (String)
movie duration1 (String)
movie year1 (int)
movie price1 (double)
Movie title2
movie category2
movie duration2
movie year2
movie price2
etc
etc...

そして、これが何を読み取るべきかの実際の例です:

Adam
Documentary
78 minutes
2012
7.99
Choo Choo
Documentary
60 minutes
2006
11.99

エラーの内容:

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 XXXX_XXXX.DVDCollection.loadData(DVDCollection.java:29)
at XXXX_XXXX.DVDApplication.main(DVDApplication.java:14)
4

7 に答える 7

0

問題の原因がわかりました。

nextline() を使用すると、スキャナは現在の行を超えて進み、次の行の先頭に配置されます。

ただし、nextInt または nextDouble を使用すると、スキャナーは nextInteger および次の double 値を過ぎて進み、現在の行自体の最後に配置されます。

したがって、\n はシーケンスを分割する次の nextLine の一部としても読み取られます。

回避策として、このようにコーディングできます。

while (inputFile.hasNext()) {
            String fileTitle = inputFile.nextLine();
            String fileCategory = inputFile.nextLine();
            String fileRunningTime = inputFile.nextLine();
            int fileYear = Integer.parseInt(inputFile.nextLine());
            double filePrice = Double.parseDouble(inputFile.nextLine());
        }
        inputFile.close();
于 2013-04-04T10:05:34.640 に答える
0

これらの行に問題がある可能性があります。

int fileYear = inputFile.nextInt();
double filePrice = inputFile.nextDouble();

ある時点で、期待される型が見つかりません (double ではありません)。次の行に進み、ファイルにエラーがないことを確認してください (数値は期待どおりにフォーマットされています...)。

于 2013-04-04T09:52:23.310 に答える
0

トレースから、Scannerが値であると想定されるdouble値を読み取ろうとしたが、値ではないことが示されていdoubleます。

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 XXXX_XXXX.DVDCollection.loadData(DVDCollection.java:29)
at XXXX_XXXX.DVDApplication.main(DVDApplication.java:14)
于 2013-04-04T09:58:08.717 に答える
0

あなたの場合、それは合うでしょう

String fileTitle = inputFile.nextLine();
String fileCategory = inputFile.nextLine();
String fileRunningTime = inputFile.nextLine();
int fileYear = Integer.parseInt(inputFile.nextLine());
double filePrice = Double.parseDouble(inputFile.nextLine());
于 2013-04-04T09:59:50.147 に答える
0

(InputMisMatchExceptionからスローされた場合nextDouble()) は、「次のトークンが Float 正規表現と一致しないか、範囲外である」ことを示します ( Javadocからの引用)。

そのため、読み込もうとしているファイルに問題がある可能性が最も高くなります。ただし、その内容がなければ、正確に何が原因であるかを推測するのは困難です。

于 2013-04-04T09:54:03.367 に答える
0

Scanner#nextDouble()throws - 次のトークンが正規表現とInputMismatchException一致しない場合、または範囲外の場合。Float

したがって、明らかに入力は float リテラルではありません。私はスペースがあるかもしれないと思っていdoubleますstring..

于 2013-04-04T09:54:14.107 に答える