0

这段代码没有语法错误,但是当我输入浮点值时会得到 InputMismatchException。双值而不是浮点数得到相同的异常。如果我以 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 回答