在Java中使用input.nextDouble时出错

在Java中使用input.nextDouble时出错,java,input,Java,Input,我是Java的初学者,我正在尝试用Java制作一个简单的体重指数计算器(米和公斤)。 每当我以双重输入方式输入我的身高时,我都会收到一个错误: Exception in thread "main" java.util.InputMismatchException at java.util.Scanner.throwFor(Unknown Source) at java.util.Scanner.next(Unknown Source) at java.util.Scanner.nextDoubl

我是Java的初学者,我正在尝试用Java制作一个简单的体重指数计算器(米和公斤)。 每当我以双重输入方式输入我的身高时,我都会收到一个错误:

Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextDouble(Unknown Source)
at ui.BMI_Calculator.main(BMI_Calculator.java:15)
代码:


我在一个在线IDE上测试了你的代码,它工作了,然后我在我的机器上测试,得到了与你相同的错误,然后我再次测试,但是使用逗号(,)而不是小数点(.),它工作了。由于Scanner对象使用JVM的默认区域设置来解析输入值,因此会抛出InputMismatchException,当输入值与预期值不同时,会导致异常

您可以将区域设置传递给使用的扫描仪。作为十进制分隔符:

input.useLocale(Locale.US);
或者在输入值时只使用(,)

此外,您的代码中还有另一个错误,在最后一个printf中:

 System.out.printf("%nBMI = %d", BMI);

应该使用%f表示浮点,而不是使用%d表示整数。您可以在以下内容中找到有关如何格式化数字输出的更多信息。

我在一个在线IDE上测试了您的代码,它成功了,然后我在我的机器上测试,得到了与您相同的错误,然后我再次测试,但使用逗号(,)而不是小数点(.),它成功了。由于Scanner对象使用JVM的默认区域设置来解析输入值,因此会抛出InputMismatchException,当输入值与预期值不同时,会导致异常

您可以将区域设置传递给使用的扫描仪。作为十进制分隔符:

input.useLocale(Locale.US);
或者在输入值时只使用(,)

此外,您的代码中还有另一个错误,在最后一个printf中:

 System.out.printf("%nBMI = %d", BMI);

应该使用%f表示浮点,而不是使用%d表示整数。您可以在以下内容中找到有关如何格式化数字输出的更多信息。

您提供的确切输入是什么?另外,
%d
用于int格式,您想要
%f
用于
double
。您在运行程序时提供了双精度值吗?我将1.75作为我的身高输入,得到了一个错误,使用
Scanner.nextLine()
然后使用
Double.parseDouble()
String
解析为
Double
,您到底提供了什么输入?另外,
%d
用于int格式,您想要
%f
用于
double
。您在运行程序时提供了双精度值吗?我将1.75作为我的身高输入,得到了一个错误,使用
Scanner.nextLine()
然后使用
Double.parseDouble()