Java代码中输入十进制时出现编译错误

3

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

2
你遇到了一个运行时错误,这个程序已经编译完成。 - Federico klez Culloca
3
请将异常添加为问题的一部分而不是评论。 - soufrk
3
你所处的地区是否使用逗号,作为小数点? - Peter Lawrey
@PeterLawrey 是的,这可能是异常的原因 +1。 - bit-shashank
3
只是想提一句,“输入正整数”是一个奇怪的提示,因为它可能会导致输入分数。 - T.J. Crowder
显示剩余11条评论
1个回答

5
这里是关于IT技术的翻译内容:

它涉及到您PC的默认位置行为,更详细地说是在JVM上设置了用于位置的数字格式化程序。日期也是如此。

例如,我是德国人,并在我的PC上设置了这个设置。现在我需要输入像这样的数字: 5,5 因为是德国的默认分隔符。与日期/等相同的事情也会发生,所以11月23日将变为23/11而不是像美国那样的11/23。

您可以使用以下方式更改默认输入类型:

Scanner scanner = new Scanner(System.in).useLocale(Locale.US); // 5.5, DE=5,5, ....

这不是编译错误,因为程序可以被编译和启动。错误是在运行时触发的,所以它是一个运行时错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接