提问人:catch23 提问时间:6/17/2013 最后编辑:Roman Ccatch23 更新时间:9/29/2017 访问量:43091
扫描程序双精度值 - InputMismatchException
Scanner double value - InputMismatchException
问:
我尝试以最简单的方式使用扫描仪:
法典:
double gas, efficiency, distance, cost;
Scanner scanner = new Scanner(System.in);
System.out.print("Enter the number of gallons of gas in the tank: ");
gas = scanner.nextDouble();
System.out.print("Enter the fuel efficiency: ");
efficiency = scanner.nextDouble();
但是在第一次输入后,它会抛出:5.1
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:909)
at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextDouble(Scanner.java:2456)
at udacity.MileagePrinter.main(MileagePrinter.java:59)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
JavaDocs 状态:
由 Scanner 引发,以指示检索到的令牌与
预期类型的模式不匹配,或者令牌超出预期类型的范围。
但在我看来,一切看起来都是正确的,应该可以正常工作。
问题:
- 为什么在这种情况下会发生这种情况?
- 如何规避这个麻烦?
答:
47赞
Alexis C.
6/17/2013
#1
您应该为扫描仪精确设置一个区域设置。
Scanner scanner = new Scanner(System.in).useLocale(Locale.US);
从文档:
此类的实例能够扫描 标准格式以及扫描仪区域设置的格式。一个 scanner 的初始语言环境是 Locale.getDefault() 方法;它可以通过 useLocale(java.util.Locale) 方法
本地化格式定义如下 参数,对于特定语言环境,这些参数取自该语言环境的 DecimalFormat 对象 df 及其 DecimalFormatSymbols 对象 DFS的。
因此,您的默认区域设置当然使用 DecimalFormat,它期望逗号作为十进制分隔符而不是点。
评论
3赞
fge
6/17/2013
.useLocale()
returns ,您可以将其缩短为this
new Scanner(System.in).useLocale(Locale.US)
0赞
Prasad Kharkar
6/17/2013
我尝试运行这个程序,但没有遇到任何问题。我能知道这是为什么吗?
2赞
fge
6/17/2013
@PrasadKharkar可能是因为在 JVM 的默认语言环境中,十进制数字分隔符是点
1赞
fge
6/17/2013
@nazar_art导入正确的包; 在Locale
java.util.Locale
0赞
fge
6/17/2013
您@nazar_art使用 Intellij IDEA 吗?导入应该是自动的......在最坏的情况下,它会询问您要导入的内容。
7赞
Viktor Mellgren
6/17/2013
#2
确保您使用的是正确的区域设置
Scanner scanner = new Scanner(System.in).useLocale(Locale.US);
也许您正在使用“,”是十进制分隔符的区域设置
评论
0赞
catch23
6/17/2013
是的,你是对的,当我尝试时一切都很好。我可以将其更改为任何 defalt 值吗?5,1
0赞
Viktor Mellgren
6/18/2013
我相信,如果你有 Windows,如果你去“区域和语言”,你可以将区域设置更改为你需要的任何区域设置。
0赞
catch23
6/19/2013
我是 Ubunta 12.04 的新用户(自 2 周以来)
1赞
Viktor Mellgren
6/19/2013
然后试试这个:blog.andrewbeacock.com/2007/01/......
1赞
Kalema Edgar
1/3/2021
当我遇到同样的情况时,语言环境就是问题 - stackoverflow.com/questions/65551133/......
评论
.
,