为什么我要使用nextFloat读取InputMismatchException?

时间:2015-02-08 02:01:40

标签: java java.util.scanner inputmismatchexception

此代码没有语法错误,但在放入float值时会收到InputMismatchException。双值而不是float获得相同的异常。如果我输入F.f格式的每个值(带点),则会出现异常。如果我输入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);

提前致谢!

1 个答案:

答案 0 :(得分:1)

javadoc解释说,Scanner方法在读取数字时默认使用默认的Locale格式规则。

它说:

  

此类的实例能够扫描标准格式的数字以及扫描程序语言环境的格式。扫描程序的初始语言环境是Locale.getDefault(Locale.Category.FORMAT)方法返回的值;它可以通过useLocale(java.util.Locale)方法更改。 reset()方法会将扫描程序的语言环境的值重置为初始语言环境,无论之前是否已更改。

所以......如果你想让你的程序识别1.9而不是1,9,要么改变你的默认语言环境(在程序中,在启动参数中,或在系统设置中) ...或者使用适当的Scanner配置Locale,如上所述。