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?
java
biginteger
cc.
quelle
quelle
int
, so dass SieBigInteger
für dieses Beispiel nicht benötigen .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 ändernsum
, sondern müssen das Ergebnis deradd
Methode dersum
Variablen neu zuweisen.quelle
Die
BigInteger
Klasse ist unveränderlich, daher können Sie ihren Status nicht ändern. Wenn Sie also "Hinzufügen" aufrufen, wird ein neues erstelltBigInteger
, anstatt das aktuelle zu ändern.quelle
Andere Antworten haben es geschafft; BigInteger ist unveränderlich. Hier ist die geringfügige Änderung, damit dieser Code funktioniert.
quelle
BigInteger ist eine unveränderliche Klasse. Wenn Sie also eine Arithmetik ausführen, müssen Sie die Ausgabe einer Variablen neu zuweisen.
quelle
java.math.BigInteger
ist eine unveränderliche Klasse, daher können wir kein neues Objekt an der Position des bereits zugewiesenen Objekts zuweisen. Sie können jedoch ein neues Objekt erstellen, um einen neuen Wert zuzuweisen, z.quelle
Ja, es ist unveränderlich
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
quelle
Eigentlich kann man verwenden,
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.
quelle
Biginteger
ist eine unveränderliche Klasse. Sie müssen den Wert Ihrer Ausgabe explizit der Summe wie folgt zuweisen:quelle
Da Sie einige int-Werte zusammenfassen, muss BigInteger nicht verwendet werden.
long
ist genug dafür.int
beträgt 32 Bit, währendlong
64 Bit die Summe aller int-Werte enthalten können.quelle