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
方法的结果到sum
variables。
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值的总和。