私はこのコードを持っていますが、これはうまくいきません。
BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
if (isPrim(i)) {
sum.add(BigInteger.valueOf(i));
}
}
合計変数は常に0です。何が間違っていますか。
BigInteger
は不変です。 Javadocは、 add() "[r]は(this + val)の値を持つBigIntegerを返します"と述べています。したがって、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));
}
}
Java.math.BigInteger
はimmutableクラスなので、既に割り当てられているオブジェクトの場所に新しいオブジェクトを割り当てることはできません。しかし、次のように新しい値を割り当てるために新しいオブジェクトを作成することができます。
sum = sum.add(BigInteger.valueOf(i));
BigIntegerは不変クラスです。そのため、算術演算を行うときはいつでも、出力を変数に割り当て直す必要があります。
はい、不変です
sum.add(BigInteger.valueOf(i));
そのため、BigIntegerクラスのメソッドadd()は新しいBigIntger値をそれ自身の値に追加しませんが、は現在の値を変更せずに新しいBigInteger参照を作成して返します。 BigIntegerとこれは文字列の場合でも行われることです
実際に使えます、
BigInteger sum= new BigInteger("12345");
bigIntegerクラスのオブジェクトを作成するためのものです。ただし、ここでの問題は、二重引用符で変数を指定できないことです。したがって、valueOf()メソッドを使用し、その合計に答えを格納する必要があります。もう一度書きます。
sum= sum.add(BigInteger.valueOf(i));
Biginteger
は不変クラスです。このように、あなたの出力の値をsumに明示的に代入する必要があります。
sum = sum.add(BigInteger.valueof(i));