在Java代码中输入小数时出现编译错误

时间:2018-06-26 13:41:44

标签: java compiler-errors

我是一个完整的初学者,正在尝试编写代码以打印数字的阶乘。我希望用户能够输入他们想要的任何可能的数字,但是如果他们输入的数字不是正整数,程序将告诉他们必须重试。但是,当我运行代码并尝试输入“ 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) –

1 个答案:

答案 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, ....

这不是编译错误,因为可以编译和启动程序。该错误是在运行时触发的,因此是运行时错误。