如何使用BigInteger?

cc.*_*cc. 150 java biginteger

我有这段代码,但是没有用:

BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
    if (isPrim(i)) {
        sum.add(BigInteger.valueOf(i));
    }
}
Run Code Online (Sandbox Code Playgroud)

sum变量总是0.我做错了什么?

Mar*_*ell 200

BigInteger是不可改变的.javadocs声明add() "[r] eturns一个BigInteger,其值为(this + val)." 因此,您无法更改sum,您需要将add方法的结果重新分配给sum变量.

sum = sum.add(BigInteger.valueOf(i));
Run Code Online (Sandbox Code Playgroud)

  • 但是真的很难想到也许他将他的例子简化到了问题的确切位置? (105认同)
  • 在他的例子中,他不会. (2认同)

Boz*_*zho 57

sum = sum.add(BigInteger.valueOf(i))
Run Code Online (Sandbox Code Playgroud)

BigInteger班是不可改变的,因此你不能改变其状态.所以调用"add"会创建一个新的BigInteger,而不是修改当前的.


Dea*_*n J 21

其他答复已经钉了它; BigInteger是不可变的.这是使代码工作的微小变化.

BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
    if (isPrim(i)) {
        sum = sum.add(BigInteger.valueOf(i));
    }
}
Run Code Online (Sandbox Code Playgroud)


Arv*_*ind 11

java.math.BigInteger是一个不可变类,所以我们不能在已经分配的对象的位置分配新对象.但是您可以创建新对象来分配新值,如:

sum = sum.add(BigInteger.valueOf(i));
Run Code Online (Sandbox Code Playgroud)


Poi*_*ter 10

BigInteger是一个不可变的类.因此,无论何时进行任何算术运算,都必须将输出重新分配给变量.