我有这段代码,但是无效:
BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
if (isPrim(i)) {
sum.add(BigInteger.valueOf(i));
}
}
sum变量总是0.我做错了什么?
答案 0 :(得分:197)
BigInteger
是不可变的。 javadocs声明add()“[r] eturns一个BigInteger,其值为(this + val)。”因此,您无法更改sum
,您需要将add
方法的结果重新分配给sum
变量。
sum = sum.add(BigInteger.valueOf(i));
答案 1 :(得分:56)
sum = sum.add(BigInteger.valueOf(i))
BigInteger
类是不可变的,因此您无法更改其状态。所以调用“add”会创建一个新的BigInteger
,而不是修改当前的。{/ p>
答案 2 :(得分:20)
其他回复已经钉了它; BigInteger是不可变的。这是使代码有效的微小变化。
BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
if (isPrim(i)) {
sum = sum.add(BigInteger.valueOf(i));
}
}
答案 3 :(得分:11)
java.math.BigInteger
是不可变类,因此我们无法在已分配对象的位置分配新对象。但是您可以创建新对象来分配新值,如:
sum = sum.add(BigInteger.valueOf(i));
答案 4 :(得分:10)
BigInteger是一个不可变的类。因此,无论何时进行任何算术运算,都必须将输出重新分配给变量。
答案 5 :(得分:3)
是的,它是不变的
sum.add(BigInteger.valueOf(i));
所以BigInteger类的方法add()不会将新的BigIntger值添加到它自己的值,但创建并返回一个新的BigInteger引用而不更改当前的BigInteger和这是什么甚至在字符串
的情况下完成答案 6 :(得分:0)
实际上你可以使用,
selectedBackgroundView
用于为BigInteger类创建对象。但问题是,你不能在双引号中给出一个变量。所以我们必须使用 valueOf()方法,我们必须存储答案在那个总和中。所以我们会写,
BigInteger sum= new BigInteger("12345");
答案 7 :(得分:0)
Biginteger
是一个不可变的类。
您需要将输出的值明确指定为总和,如下所示:
sum = sum.add(BigInteger.valueof(i));
答案 8 :(得分:-6)
由于您总结了一些int值,因此无需使用BigInteger。 long
就足够了。 int
是32位,而long
是64位,可以包含所有int值的总和。