Wie zu verwenden BigInteger?
Ich habe dieses Stück code, das nicht funktioniert:
BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
if (isPrim(i)) {
sum.add(BigInteger.valueOf(i));
}
}
Die variable Summe ist immer 0. Was mache ich falsch?
- Übrigens, die Summe sollte leicht passen in
int
, so brauchen Sie nichtBigInteger
für dieses Beispiel. - NÖ, änderte ich den code. Die Zahl ist größer als 5000.
- Die Frage, wie doppelte scheint nicht das gleiche problem, wie diese Frage (der Frage verknüpft ist, über die Funktion zu bedienen, so dass BigInteger können Hinzugefügt werden, dieser wird über die Funktion "add")
Du musst angemeldet sein, um einen Kommentar abzugeben.
BigInteger
unveränderlich ist. Die javadocs besagt, dass add() "[r]eturns ein BigInteger mit dem Wert (this + val)." Daher können Sie nicht ändernsum
, die Sie benötigen, weisen Sie das Ergebnis deradd
Methodesum
variable.Den
BigInteger
- Klasse ist unveränderlich, daher man kann nicht seinen Zustand ändern. Also Aufruf von "hinzufügen" erstellt eine neueBigInteger
eher als die Bearbeitung der aktuellen.Anderen Antworten haben es genagelt; BigInteger ist unveränderlich. Hier ist die kleine änderung zu machen, dass die code-Arbeit.
java.math.BigInteger
ist ein unveränderlich Klasse, so können wir nicht zuordnen, neue Objekt an der Stelle der bereits zugewiesenen Objekt. Aber Sie können neue Objekt zuweisen neuen Wert wie:BigInteger ist eine immutable Klasse. Also, Wann immer Sie eine beliebige arithmetische, Sie haben weisen Sie die Ausgabe in eine variable.
Ja, es ist Unveränderlich
also die Methode add() der Klasse BigInteger keine neuen BigIntger Wert auf Ihren eigenen Wert ,aber erstellt und gibt einen neuen BigInteger Referenz ohne änderung der aktuellen BigInteger und dies ist, was getan, auch im Falle von Strings
Tatsächlich, die Sie verwenden können,
für die erstellen-Objekt für die BigInteger-Klasse.Aber das problem hier ist,können Sie nicht geben eine variable in doppelte Anführungszeichen.So haben wir die Verwendung der valueOf() Methode und wir haben zum speichern der Antwort in dieser Summe wieder.So schreiben wir,
Biginteger
ist eine immutable Klasse.Sie müssen explizit einen Wert zuweisen, der ausgegeben Summe wie diese:
Da Sie zusammenfassend einige int-Werte zusammen, gibt es keine Notwendigkeit zu verwenden BigInteger.
long
ist genug.int
ist 32 bit, währendlong
ist 64 bits enthalten kann, die Summe aller int-Werte.