此代码没有语法错误,但在放入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);
提前致谢!
答案 0 :(得分:1)
javadoc解释说,Scanner
方法在读取数字时默认使用默认的Locale格式规则。
它说:
此类的实例能够扫描标准格式的数字以及扫描程序语言环境的格式。扫描程序的初始语言环境是
Locale.getDefault(Locale.Category.FORMAT)
方法返回的值;它可以通过useLocale(java.util.Locale)
方法更改。 reset()方法会将扫描程序的语言环境的值重置为初始语言环境,无论之前是否已更改。
所以......如果你想让你的程序识别1.9
而不是1,9
,要么改变你的默认语言环境(在程序中,在启动参数中,或在系统设置中) ...或者使用适当的Scanner
配置Locale
,如上所述。