0

このコードには構文エラーはありませんが、float 値を入力すると InputMismatchException が発生します。float の代わりに double 値でも同じ例外が発生します。すべての値を Ff 形式 (ドット付き) で入力すると、例外が表示されます。1,9 の値 (カンマ) を入力すると、このコードが機能します。なんで?

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);

前もって感謝します!

4

1 に答える 1

1

javadoc は、Scannerメソッドが数値を読み取るときにデフォルトのロケールのフォーマット規則を使用することをデフォルトであると説明しています。

それは言います:

このクラスのインスタンスは、標準形式およびスキャナのロケールの形式で数値をスキャンできます。スキャナの初期ロケールは、Locale.getDefault(Locale.Category.FORMAT)メソッドによって返される値です。メソッドによって変更される場合がありますuseLocale(java.util.Locale)。reset() メソッドは、以前に変更されたかどうかに関係なく、スキャナーのロケールの値を初期ロケールにリセットします。

1.9したがって... プログラムにではなくを認識させたい場合は1,9、デフォルトのロケールを (プログラム内、起動パラメーター、またはシステム設定で) 変更するか、または をScanner適切なLocaleで構成します。

于 2015-02-08T02:12:16.833 に答える