我有一段代码,但是没有用:
BigInteger sum = BigInteger.valueOf(0); for(int i = 2; i < 5000; i++) { if (isPrim(i)) { sum.add(BigInteger.valueOf(i)); } }
Sum 变量总是0。我做错了什么?
sum = sum.add(BigInteger.valueOf(i))
BigInteger类是不可变的,因此您不能更改它的状态。因此,调用“ add”将创建一个新的 BigInteger,而不是修改当前。
BigInteger
BigInteger是不可变的。Javadocs 指出,添加()“[ r ]返回一个 BigInteger,其值为(this + val)因此,您不能更改 sum,您需要将 add方法的结果重新分配给 sum变量。
sum
add
sum = sum.add(BigInteger.valueOf(i));
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是一个 永恒不变类,因此我们不能在已分配对象的位置分配新对象。但是您可以创建新对象来赋予新值,比如:
java.math.BigInteger
因为要将一些 int 值相加,所以没有必要使用 BigInteger。long就足够了。int是32位,而 long是64位,它可以包含所有 int 值的和。
long
int
是的,它是永恒的
sum.add(BigInteger.valueOf(i));
因此 BigInteger 类的 add ()方法不会向自己的值中添加新的 BigIntger 值,而是在不更改当前 BigInteger 和 即使在 String 的情况下也是这样做的的情况下添加 创建并返回一个新的 BigInteger 引用
其实你可以用,
BigInteger sum= new BigInteger("12345");
用于为 BigInteger 类创建对象。但这里的问题是,你不能在双引号中给出一个变量,所以我们必须使用 ValueOf ()方法我们必须把答案再次存储在那个和里,所以我们写,
sum= sum.add(BigInteger.valueOf(i));
Biginteger是一个不可变的类。 您需要将输出的值显式赋值为如下所示的和:
Biginteger
sum = sum.add(BigInteger.valueof(i));
假设有时我们的输入值太大,无法存储整数值,例如123456789123456789 在这种情况下,像 long 这样的标准数据类型无法处理它。但是 Java 提供了一个类“ BigInteger”。它帮助我们传递和获取巨大的价值。 请参阅下面的考试来理清这个概念。
import java.io.*; import java.math.BigInteger; import java.util.*; public class Solution { public static void main(String[] args) { Scanner sc=new Scanner(System.in); BigInteger B1=new BigInteger("10"); BigInteger B2=new BigInteger("20"); B1=sc.nextBigInteger(); B2=sc.nextBigInteger(); Solution obj=new Solution(); obj.Big_Int(B1,B2); sc.close(); } public void Big_Int(BigInteger a,BigInteger b) { //BigInteger bi=new BigInteger("1"); BigInteger bi=BigInteger.TEN; bi=a; bi=bi.add(b); System.out.println(bi); bi=a; bi=bi.multiply(b); System.out.println(bi); } }
输入: 123456789123456789 1578426354785
产出: 123458367549811574 194867449629598334799730885365