Java:如何使用BigInteger?

我有这段代码,这是不工作的:

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

总和variables总是0.我做错了什么?

BigInteger是不可变的。 javadocs指出add() “[r]会抛出一个值为(this + val)的BigInteger。 因此,您不能更改sum ,您需要重新分配add方法的结果到sumvariables。

 sum = sum.add(BigInteger.valueOf(i)); 
 sum = sum.add(BigInteger.valueOf(i)) 

BigInteger类是不可变的,所以你不能改变它的状态。 所以调用“add”会创build一个新的BigInteger ,而不是修改当前的。

其他答复已经确定了; BigInteger是不可变的。 这是对代码起作用的小改动。

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

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

 sum = sum.add(BigInteger.valueOf(i)); 

BigInteger是一个不可变的类。 所以每当你做任何算术,你必须重新分配输出到一个variables。

是的,它是不可变的

 sum.add(BigInteger.valueOf(i)); 

因此BigInteger类的add()方法不会将新的BigIntger值添加到自己的值中,而是会创build并返回新的BigInteger引用而不更改当前的BigInteger, 即使在string

Biginteger是一个不可改变的类。 你需要明确地分配你的输出的值,像这样总结:

 sum = sum.add(BigInteger.valueof(i)); 

其实你可以用,

 BigInteger sum= new BigInteger("12345"); 

为BigInteger类创build对象。但是这里的问题是,你不能在双引号中给出一个variables。所以我们必须使用valueOf()方法,我们必须再次存储答案。因此,我们将写,

 sum= sum.add(BigInteger.valueOf(i)); 

由于您正在总结一些int值,因此不需要使用BigInteger。 long已经足够了。 int是32位,而long是64位,可以包含所有int值的总和。