BigInteger使用*二元运算符报错:操作数类型不匹配求助
问题解决:BigInteger阶乘方法的错误修复
1. 运算符错误的原因与修复
BigInteger是Java中的引用类型对象,不能像int、long这类基本数据类型那样直接用*算术运算符做乘法操作,必须调用它提供的multiply()实例方法来完成乘法运算。你代码里的factorial * BigInteger.valueOf(i)写法违反了这个规则,这就是报错的直接原因。
把这行代码改成:
factorial = factorial.multiply(BigInteger.valueOf(i));
2. 循环逻辑的隐藏问题
你的for循环里有两处i++:一处是循环头部的迭代器自增,另一处是循环体内部的i++。这会导致每次循环i都会增加2,比如第一次循环i=1,执行后直接跳到3,漏掉了2这个乘数,最终计算的结果根本不是阶乘,必须删掉循环体内部的i++。
修正后的完整代码
public static BigInteger bigIntegerFactorialMethod(int number){ int i = 1; BigInteger factorial = BigInteger.valueOf(1); for(i = 1; i <= number; i++){ factorial = factorial.multiply(BigInteger.valueOf(i)); } return factorial; }
内容的提问来源于stack exchange,提问作者Jaret Sanchez
相关产品推荐
相关产品推荐

