我有这段代码,它不起作用:
BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
if (isPrim(i)) {
sum.add(BigInteger.valueOf(i));
}
}
sum 变量始终为 0。我做错了什么?
我有这段代码,它不起作用:
BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
if (isPrim(i)) {
sum.add(BigInteger.valueOf(i));
}
}
sum 变量始终为 0。我做错了什么?
BigInteger
是不可变的。javadocs 声明add() “[r] 返回一个 BigInteger,其值为 (this + val)。” 因此,您无法更改sum
,您需要将add
方法的结果重新分配给sum
变量。
sum = sum.add(BigInteger.valueOf(i));
sum = sum.add(BigInteger.valueOf(i))
该类BigInteger
是不可变的,因此您无法更改其状态。所以调用“add”会创建一个新的BigInteger
,而不是修改当前的。
其他答复已经确定了;BigInteger 是不可变的。这是使该代码正常工作的小改动。
BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
if (isPrim(i)) {
sum = sum.add(BigInteger.valueOf(i));
}
}
BigInteger 是一个不可变的类。因此,无论何时进行任何算术运算,都必须将输出重新分配给变量。
java.math.BigInteger
是一个不可变的类,所以我们不能在已分配对象的位置分配新对象。但是您可以创建新对象来分配新值,例如:
sum = sum.add(BigInteger.valueOf(i));
是的,它是不可变的
sum.add(BigInteger.valueOf(i));
所以 BigInteger 类的方法 add() 不会将新的 BigIntger 值添加到它自己的值中,而是在不更改当前 BigInteger的情况下创建并返回一个新的 BigInteger 引用,即使在 Strings 的情况下也是如此
其实可以用
BigInteger sum= new BigInteger("12345");
用于为 BigInteger 类创建对象。但这里的问题是,你不能在双引号中给出变量。所以我们必须使用valueOf()方法,我们必须再次将答案存储在该总和中。所以我们会写,
sum= sum.add(BigInteger.valueOf(i));
Biginteger
是一个不可变的类。您需要明确地将输出的值分配给总和,如下所示:
sum = sum.add(BigInteger.valueof(i));
由于您将一些 int 值汇总在一起,因此无需使用 BigInteger。long
就足够了。int
是 32 位,而long
是 64 位,可以包含所有 int 值的总和。