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

要知道你为什么会得到这个异常,你可以做一些 R & D.Like,使用 next() 而不是 nextDouble() 看看你得到了什么。如果编译器要求双精度,则使用 nextDouble。还有一件事,当接收到的令牌与模式不匹配时会发生此异常。例如,它必须在得到双倍后得到非双倍令牌,可能是下一行或回车

于 2013-02-19T18:56:20.170 回答
0

这里的问题是扫描仪将默认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 回答