Java 扫描仪双值-输入不匹配异常

Java 扫描仪双值-输入不匹配异常,java,inputmismatchexception,Java,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: ");

我尝试以最简单的方式使用扫描仪:

代码:

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)
国家:

由扫描程序抛出,以指示检索到的令牌与 模式,或令牌超出预期类型的范围

但在我看来,所有这些都是正确的,应该可以正常工作

问题:

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();
  • 为什么在这种情况下会发生这种情况
  • 如何避开这个麻烦

您应该为扫描仪精确设置区域设置

Scanner scanner = new Scanner(System.in).useLocale(Locale.US);
从:

此类的实例能够扫描 标准格式以及扫描仪区域设置的格式。A. 扫描程序的初始区域设置是 getDefault()方法;可通过以下方式进行更改: useLocale(java.util.Locale)方法

本地化格式定义如下: 参数,用于特定区域设置的参数取自该区域设置的 DecimalFormat对象、df及其和DecimalFormatSymbols对象, dfs


因此,您的默认区域设置肯定使用十进制格式,该格式要求逗号而不是点作为十进制分隔符。

确保您使用的区域设置正确

Scanner scanner = new Scanner(System.in).useLocale(Locale.US);

可能您正在使用的区域设置中,“,”是十进制分隔符。

.useLocale()
返回
,您可以将其缩短为
新扫描仪(System.in)。useLocale(locale.US)
我尝试运行此程序,但没有遇到任何问题。我可以知道为什么吗?@PrasadKharkar可能是因为在JVM的默认区域设置中,十进制数字分隔符是dot@nazar_art导入正确的包装
Locale
位于
java.util.Locale
@nazar\u art您在使用Intellij IDEA吗?导入应该是自动的。。。在最坏的情况下,它会询问您要导入什么。您提供的代码片段没有问题,错误在其他地方。如果不指定区域设置,您的
可能应该是Locale@Tdorno取决于你使用的语言环境,也许你使用的是我们的localeYes你是对的,当我尝试
5时,1
一切正常。我可以将其更改为任何defalt值?我相信,如果您有windows,如果您转到“区域和语言”,您可以将区域设置更改为您需要的任何区域设置。我是Ubunta 12.04的新用户(从2周起),请尝试以下操作:当我面临相同的问题时,区域设置是一个问题-