Ich habe diesen Code, der nicht funktioniert:
BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
if (isPrim(i)) {
sum.add(BigInteger.valueOf(i));
}
}
Die Summenvariable ist immer 0. Was mache ich falsch?
Ich habe diesen Code, der nicht funktioniert:
BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
if (isPrim(i)) {
sum.add(BigInteger.valueOf(i));
}
}
Die Summenvariable ist immer 0. Was mache ich falsch?
Antworten:
BigInteger
ist unveränderlich. Die Javadocs geben an, dass add () "[r] eine BigInteger zurückgibt, deren Wert (this + val) ist." Daher können Sie nicht ändern sum
, sondern müssen das Ergebnis der add
Methode der sum
Variablen neu zuweisen.
sum = sum.add(BigInteger.valueOf(i));
Ja, es ist unveränderlich
sum.add(BigInteger.valueOf(i));
Die Methode add () der BigInteger-Klasse fügt also keinen neuen BigIntger-Wert zu ihrem eigenen Wert hinzu, sondern erstellt eine neue BigInteger-Referenz und gibt sie zurück, ohne die aktuelle BigInteger zu ändern. Dies ist auch bei Strings der Fall
Eigentlich kann man verwenden,
BigInteger sum= new BigInteger("12345");
Das Problem hier ist jedoch, dass Sie in den doppelten Anführungszeichen keine Variable angeben können. Wir müssen also die Methode valueOf () verwenden und die Antwort erneut in dieser Summe speichern.
sum= sum.add(BigInteger.valueOf(i));
Biginteger
ist eine unveränderliche Klasse. Sie müssen den Wert Ihrer Ausgabe explizit der Summe wie folgt zuweisen:
sum = sum.add(BigInteger.valueof(i));
Da Sie einige int-Werte zusammenfassen, muss BigInteger nicht verwendet werden. long
ist genug dafür. int
beträgt 32 Bit, während long
64 Bit die Summe aller int-Werte enthalten können.
int
, so dass SieBigInteger
für dieses Beispiel nicht benötigen .