2013-02-19 47 views
0

有人可以向我解釋爲什麼我在嘗試讀取雙精度的行上出現錯誤「InputMismatchException」?謝謝!從java中的文本文件中讀取雙精度

 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 
+2

那麼什麼是數據文件中?這是我們不可能知道爲什麼你不知道的數據得到的錯誤... – 2013-02-19 18:35:53

+0

不好意思啊,文件中的數據是:4個 戰爭與和平 12.99 綠雞蛋和火腿 3.99 哈利波特 5.99 james 5.0 – user2069328 2013-02-19 18:52:01

回答

0

知道爲什麼你得到這個例外,你可以做一些[R & D.Like, 下次使用()代替nextDouble()和看看你得到了什麼。 如果編譯器要求double,則使用nextDouble。還有一件事,當接收到的令牌不匹配模式時,會發生此異常。例如,它在獲得雙倍後必須獲得非雙重令牌,可能是下一行或回車

+0

當我從nextDouble()更改它時;到next();編譯器說:線程「main」中的異常java.lang.Error:未解決的編譯問題: \t類型不匹配:無法從字符串轉換爲雙倍 – user2069328 2013-02-19 19:08:50

+0

ok。在每個雙重值之後的文件中,新行有標記。使用next()獲取該令牌。看看你的問題是否得到解決。 – RajputAdya 2013-02-19 19:13:10

+0

抱歉,憑藉令牌代表什麼意思? – user2069328 2013-02-19 19:23:25

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()); 
     } 
0

這裏的問題是,掃描儀將默認使用whitespace作爲分隔符,所以你實際上得到的回覆是:

War 
and 
Peace 
12.99 
Green 
Eggs 
and 
Ham 

,並在達到它的nextDouble線顯然不能」 t將and轉換爲雙倍。

更改分隔符是換行,你的代碼應工作:

 Scanner sc = new Scanner(file); 
    sc.useDelimiter("\n"); 
+0

我該如何將此代碼實施到我的?我說usrIn.useDelimiter(「\ n」);之前我讀的字符串和雙? UsrIn是我的掃描儀btw的名稱。 – user2069328 2013-02-19 20:42:15

+0

只需添加usrIn.userDelimter(「\ n」);您立即在宣佈掃描儀的行後面(假設它已經創建)。我假設你正在使用掃描儀?換句話說,inFile是什麼類型的? – 2013-02-19 20:44:26

+0

這是我的加載方法貌似現在,仍然沒有工作:S:公共無效READFILE(字符串文件名){ \t嘗試{ \t \t掃描儀INFILE =新的掃描儀(新的InputStreamReader(新的FileInputStream(文件名))); \t \t int num = inFile.nextInt(); \t \t inFile.useDelimiter(「\ n」); (int i = 0,i user2069328 2013-02-19 20:52:24