0

ダブルで読み取ろうとした行で「InputMismatchException」というエラーが発生する理由を誰か説明してもらえますか? ありがとう!

        int num=inFile.nextInt();
        for(int i=0;i<num;i++){
            String inName=inFile.next();
            double inPrice=inFile.nextDouble();           // <<<this line
            Book bookInFile = new Book(inName, inPrice);
            books.add(bookInFile);
        }

テキスト ファイル内のデータ:

4
War and Peace
12.99
Green Eggs and Ham
3.99
Harry Potter
5.99
james
5.0
4

3 に答える 3

1

このアプローチを試してみてください。問題が解決します。

double d ;
        BufferedReader reader;
        try{
            reader = new BufferedReader(new FileReader("yourTextFile.txt"));
            String line= reader.readLine();       
            while(line !=null){
                try{
                    System.out.println(Integer.parseInt(line)+" is an Integer.");
                }catch(NumberFormatException e){
                try{
                    d=Double.valueOf(line);
                    System.out.println(d+" is a double.");

                }catch(NumberFormatException ex){
                    System.out.println("Not Double ' "+line+" '");
                }
                }
                line=reader.readLine();
            }

        }catch(Exception ex){
            System.out.println(ex.getMessage());
        } 
于 2013-02-19T20:00:15.497 に答える
0

ここでの問題は、Scannerがデフォルトwhitespaceでデリメータとして使用されるため、実際に返されるのは次のとおりです。

War
and
Peace
12.99
Green
Eggs
and
Ham

そして、nextDoubleラインに到達すると、明らかにandダブルに変換できません。

区切り文字を改行に変更すると、コードが機能するはずです。

     Scanner sc = new Scanner(file);
     sc.useDelimiter("\n");
于 2013-02-19T20:27:43.723 に答える
0

この例外が発生する理由を知るには、R & D のように、nextDouble() の代わりに next() を使用して、何が得られるかを確認してください。コンパイラが double を要求する場合は、nextDouble を使用します。もう 1 つ、この例外は、受け取ったトークンがパターンと一致しない場合に発生します。たとえば、次の行またはキャリッジ リターンを取得している可能性があります。

于 2013-02-19T18:56:20.170 に答える