为了账号安全,请及时绑定邮箱和手机立即绑定

计算 0 的阶乘导致 NoSuchElementException

计算 0 的阶乘导致 NoSuchElementException

九州编程 2021-08-25 15:33:44
我必须计算一个数字的阶乘。因为 0 的事实阶乘是 1。所以我也将这种情况包含在函数中。这是代码:import java.util.*;public class Factorial {    static int fact(int n) {        int result;        if (n == 0 || n == 1)            return 1;        result = fact(n - 1) * n;        return result;    }    public static void main(String args[]) {        int i, fact = 1;        Scanner sc = new Scanner(System.in);        int n = sc.nextInt();        fact = fact(n);        System.out.println(fact);    }}但是如果我将输入设为 0,则会引发一些异常线程“main”中的异常 java.util.NoSuchElementException at java.util.Scanner.throwFor(Scanner.java:862) at java.util.Scanner.next(Scanner.java:1485) at java.util.Scanner.nextInt( Scanner.java:2117) 在 java.util.Scanner.nextInt(Scanner.java:2076) 在 Factorial.main(Factorial.java:14)如何解决这种情况?编辑:我已经更改了异常。对于代码甚至不是 26 行的事情深表歉意。我在上面发布了一些代码作为注释,然后才在这里发布代码。这不是重复的。事实上,我想知道为什么它不接受 0 作为输入。它适用于所有其他输入。我使用在线编译器https://www.tutorialspoint.com/compile_java_online.php与 PC JDK 1.7 的 Java 编译器一起工作正常,但在在线 IDE 上引发异常。
查看完整描述

2 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

在线 IDE 可能正在对数据进行某种预处理,这些数据对零不太好。

TutorialPoint 拥有适用于多种语言的在线编译器,并且很可能它们都共享一些共同的后端,该后端具有将文本从浏览器传递到其服务器的魔力。我不确定后面发生了什么样的处理,但我可以想象这就像从数字左侧修剪不必要的零或类似的东西。

我在标准 C 中使用函数 sscanf 遇到了相反的问题,当输入字符串为空时,它预期会失败(返回 0),就像它的姊妹函数 scanf 一样,但它仍然返回成功并将零存储在整数变量中。

顺便说一句,如果你只是在零上添加一个前导空格或 \n,一切都很好。


查看完整回答
反对 回复 2021-08-25
  • 2 回答
  • 0 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信