我写了一个以int
为param的递归函数,并返回BigInteger
。似乎没有什么不对,但有一行以红色加下划线。
如果情况显而易见,我道歉,但目前我无法解决这个问题。
public static BigInteger factorial(int a){
BigInteger tot=BigInteger.valueOf(a);
if(a>1)tot*=factorial(a-1);
return tot;
}
第if(a>1)tot*=(factorial(a-1));
行用红色加下划线。
错误:
必需:BigInteger,Found:int
同时:
public static void main(String[] args) {
BigInteger a=f(8);
}
public static BigInteger f(int a){
BigInteger g=BigInteger.valueOf(a);
return g;
}
...作品。
来自Intellij Idea。我缺少一些基本而重要的概念吗?谢谢。
编辑:正如用户clebe45所解释的那样,答案是java 不支持运算符重载,这与我不熟悉的c ++不同。如果有人发现这是重复,请删除,我向我道歉。
答案 0 :(得分:2)
Java不支持运算符重载,因此您不能在其上使用乘法*
运算符。相反,你应该使用:
public BigInteger multiply(BigInteger val)
答案 1 :(得分:1)
*=
不适用于BigInteger。请改用multiply
:
if (a > 1) tot = tot.multiply(factorial(a - 1));