gpt4 book ai didi

java - Java 中带有 BigInteger 的 StackOverFlowError

转载 作者:搜寻专家 更新时间:2023-11-01 01:50:24 24 4
gpt4 key购买 nike

为什么这段 java 代码会抛出 StackOverflowError 异常?

public class factorial2 {

public BigInteger fact( BigInteger n)
{
BigInteger one = new BigInteger("1");
if(n.equals("0"))
return one;
else
return n.multiply(fact(n.subtract(one)));
}

public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
factorial2 f = new factorial2();
for(int i=0;i<n;i++)
{
BigInteger b = sc.nextBigInteger();
System.out.println(f.fact(b));
}
sc.close();
}
}

我尝试使用 BigInteger 生成阶乘。但是,为什么我的代码在输入时给出引用异常?

最佳答案

问题出在您的基本案例上; n(BigInteger)将不等于 "0"(String)。因此,您继续执行 else block ,它会重复执行。此外,BigInteger 包含 ONEZERO 的常量,因此您可以编写如下内容

public static BigInteger fact(BigInteger n) {
if (n.equals(BigInteger.ZERO) || n.equals(BigInteger.ONE))
return BigInteger.ONE;
else
return n.multiply(fact(n.subtract(BigInteger.ONE)));
}

使用三元运算(条件运算符 ? :),例如

public static BigInteger fact(BigInteger n) {
return (n.equals(BigInteger.ZERO) || n.equals(BigInteger.ONE)) ? BigInteger.ONE
: n.multiply(fact(n.subtract(BigInteger.ONE)));
}

关于java - Java 中带有 BigInteger 的 StackOverFlowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36046003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com