算n的阶乘的java代码异常处,关于Java:计算0的阶乘导致NoSuchElementException

我得计算一个数字的阶乘。 由于事实阶乘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,则会引发一些异常

Exception in thread"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)

at java.util.Scanner.nextInt(Scanner.java:2076)

at Factorial.main(Factorial.java:14)

如何解决这种情况?

编辑:

我已经更改了异常。对于所有的代码甚至还不到26行,我都表示歉意。 在将代码仅发布到此处之前,我已经在上面放置了一些代码作为注释。

这不是重复的。 事实上,我想知道为什么它不接受0作为输入。 它适用于所有其他输入。

我使用在线编译器https://www.tutorialspoint.com/compile_java_online.php

与PC JDK 1.7的Java编译器一起正常工作,但在在线IDE上引发了异常。

看来异常不是由您的方法fact()引发的,而是从nextInt()内部引发的? (而且您发布的代码甚至没有25行)

您能否分享您的应用运行方式?

我已经检查了您的代码,它运行正常。

可能重复的stackoverflow.com/questions/13729294/

它在其他输入上起作用吗?

可能与Java.Util.Scanner重复NoSuchElementException

如果没有更多可用令牌,将抛出NoSuchElementException。这是由于调用nextInt()而不检查是否有可用的整数引起的。为了防止发生这种情况,您可以考虑使用hasNextInt()来检查是否还有其他标记可用。链接。

修改了代码并添加了hasNextInt,这样就不会抛出NoSuchElementException并在main方法末尾关闭sc.close()来关闭资源

public static void main(String args[]) {

int fact = 1;

Scanner sc = new Scanner(System.in);

if (sc.hasNextInt()) {

int n = sc.nextInt();

fact = fact(n);

System.out.println(fact);

}

sc.close();

}

在线IDE可能正在对数据进行某种预处理,

用零打的不是很好。

TutorialPoint具有针对多种语言的在线编译器,并且很有可能

这些都共享一些共同的后端,可以完成传递文本的魔力

从浏览器到他们的服务器。我不确定是哪种处理

发生在后面,但我可以想象这就像修剪

数字左边的不必要的零或类似的东西。

我在标准C中使用函数sscanf遇到了相反的问题,

当输入字符串为空时,预期会失败(返回0)

姐妹函数scanf,但它仍返回成功并将零存储在整数中

变量。

顺便说一句,如果您仅将前导空格或 n添加到零,则一切正常

正好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值