2012-09-20 68 views
0

InputMismatchException時的Java閱讀雙打使用從純文本文件

double variable = inputFile.nextDouble(); 

給人的不匹配錯誤,我想不通爲什麼...任何人都知道這是怎麼回事?

輸入文件只是一堆像5.0雙打...

好這裏是代碼片段

String fileName; 
Scanner scanner = new Scanner(System.in); 
System.out.println("\nEnter file name that contains the matrix and vector: "); 
fileName = scanner.nextLine(); 
Scanner inputFile = new Scanner(fileName); 


double a1 = inputFile.nextDouble(); 

輸入文件的格式如下一個純文本文檔.TXT

5.0 4.0 -3.0 
4.0 2.0 5.0 
6.0 5.0 -2.0 
-13.0 4.0 12.0 

我不明白爲什麼雙打它不會採取那些...

一隻要它期望的文件格式是...我想二進制文件?是不是默認的?我沒有在指定的代碼...

+1

請發表此錯誤。 – chris

+2

和相關代碼 – dj18

+2

我們是否還可以看到如何聲明您的'inputFile'對象(我認爲它是'Scanner'?)以及文件本身的一些示例? – asteri

回答

1

,以便查明原因和確切位置在哪裏失敗添加復事先

if (inputFile.hasNextDouble()) { 
double variable = inputFile.nextDouble(); 
} else if (inputFile.hasNext()) { 
System.out.println("Not double at token " + inputFile.next()); 
} 

可能是因爲您的分隔符不是" "而且您沒有手動指定它。 要設置分隔符,請調用useDelimiter(...)函數中的一個。


1

InputMismatchException是掃描儀嘗試將字符串解析成它無法解析該格式的結果。例如,對諸如「3.3米」之類的字符串調用Double.parseDouble將引發NumberFormatException。由於iccthedral添加,甚至一個字符串作爲「3.0」(注意空白)非平凡將導致NFE。

當在Scanner.nextDouble()中發生NumberFormatException時,NFE將被包裝並在InputMismatchException中重新生成,這是發生在此處的原因。

爲了確保您的掃描儀可以讀雙,叫Scanner#hasNextDouble()只有繼續取得雙如果掃描儀有下一雙。

+0

@iccthedral正確。想想我應該把它作爲另一個例子加入到答案中? – Vulcan