我是一个完整的初学者,正在尝试编写代码以打印数字的阶乘。我希望用户能够输入他们想要的任何可能的数字,但是如果他们输入的数字不是正整数,程序将告诉他们必须重试。但是,当我运行代码并尝试输入“ 5.5”时,出现编译错误。我不知道为什么。怎么了?
package javaExercises;
import java.util.Scanner;
public class Fac {
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
try {
double result = 1; //initialize our result variable
System.out.println("Enter a positive integer: ");
double fac = in.nextDouble();
if (fac != (int) fac)
System.out.println("Your entry is not an integer.");
else if (fac < 0)
System.out.println("Your entry is negative.");
else if (fac == 0)
System.out.println("The factorial of 0 is 1.");
else {
for (double i = fac; i > 1; i--)
result *= i;
System.out.println("The factorial of " + Math.round(fac) + " is " + Math.round(result) + ".");
}
} finally {
in .close();
}
}
}
我得到的错误:
Enter a positive integer: 4.5 Exception in thread "main"
java.util.InputMismatchException at
java.base/java.util.Scanner.throwFor(Scanner.java:939) at
java.base/java.util.Scanner.next(Scanner.java:1594) at
java.base/java.util.Scanner.nextDouble(Scanner.java:2564) at
javaExercises.Fac.main(Fac.java:16) –
答案 0 :(得分:5)
这是PC机default-location
的行为,或更详细地说明了您在JVM上设置的位置所使用的数字格式器。日期也一样。
例如,我是德国人,并在我的PC上获得了此设置。现在,我需要输入这样的数字:5,5
,因为,
是德国的默认分隔符。同样的事情发生在女巫约会/ ...上,所以23. 11月将是23/11,而不是美国的11/23。
您可以使用以下方法更改默认输入类型:
Scanner scanner = new Scanner(System.in).useLocale(Locale.US); // 5.5, DE=5,5, ....
这不是编译错误,因为可以编译和启动程序。该错误是在运行时触发的,因此是运行时错误。