2015-02-08 50 views
0

這段代碼沒有語法錯誤,但是當我輸入float值時會得到InputMismatchException。雙值而不是float獲得相同的異常。如果我輸入F.f格式的每個值(帶點),則會出現異常。如果我輸入1,9值(逗號),此代碼工作。爲什麼?爲什麼我在使用nextFloat時讀取InputMismatchException?

Scanner l = new Scanner(System.in); 
String n; 
int i; 
float a; 
System.out.print("N: "); 
n = l.nextLine(); 
System.out.print("I: "); 
i = l.nextInt(); 
System.out.print("A: "); 
a = l.nextFloat(); 
System.out.println(n); 
System.out.println(i); 
System.out.println(a); 

在此先感謝!

+0

您的計算機是否設置爲以123.456,789格式(而不是123,456.789)打印數字? – immibis 2015-02-08 02:03:04

回答

1

javadoc解釋說Scanner方法在讀取數字時默認使用默認的Locale的格式規則。

它說:

這個類的一個實例能夠以標準格式以及在掃描器的語言環境的格式掃描數字。掃描儀的初始語言環境是Locale.getDefault(Locale.Category.FORMAT)方法返回的值;它可能通過useLocale(java.util.Locale)方法更改。 reset()方法會將掃描器語言環境的值重置爲初始語言環境,而不管它是否先前已更改。

所以...如果你想獲得你的程序以識別1.9而非1,9,要麼改變你的默認語言環境(在程序中,在啓動參數,或者在系統設置)...或配置如所述的Scanner與適當的Locale

相關問題