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:
BigIntegerist 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 addMethode der sumVariablen 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));
Bigintegerist 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. longist genug dafür. intbeträgt 32 Bit, während long64 Bit die Summe aller int-Werte enthalten können.
int, so dass SieBigIntegerfür dieses Beispiel nicht benötigen .