Come usare BigInteger?

Ho questo pezzo di codice, che non funziona:

BigInteger sum = BigInteger.valueOf(0); for(int i = 2; i < 5000; i++) { if (isPrim(i)) { sum.add(BigInteger.valueOf(i)); } } 

La variabile sum è sempre 0. Cosa sto facendo male?

BigInteger è immutabile. Javadocs afferma che add () “[r] restituisce un BigInteger il cui valore è (this + val).” Pertanto, non è ansible modificare la sum , è necessario riassegnare il risultato del metodo add per sum variabile.

 sum = sum.add(BigInteger.valueOf(i)); 
 sum = sum.add(BigInteger.valueOf(i)) 

La class BigInteger è immutabile, quindi non è ansible modificarne lo stato. Quindi chiamare “aggiungi” crea un nuovo BigInteger , piuttosto che modificare la corrente.

Altre risposte l’hanno inchiodato; BigInteger è immutabile. Ecco la piccola modifica per far funzionare quel codice.

 BigInteger sum = BigInteger.valueOf(0); for(int i = 2; i < 5000; i++) { if (isPrim(i)) { sum = sum.add(BigInteger.valueOf(i)); } } 

java.math.BigInteger è una class immutabile , quindi non possiamo assegnare un nuovo object nella posizione dell’object già assegnato. Ma puoi creare un nuovo object per assegnare un nuovo valore come:

 sum = sum.add(BigInteger.valueOf(i)); 

BigInteger è una class immutabile. Quindi, ogni volta che fai qualsiasi aritmetica, devi riassegnare l’output a una variabile.

Sì, è immutabile

 sum.add(BigInteger.valueOf(i)); 

quindi il metodo add () della class BigInteger non aggiunge un nuovo valore BigIntger al suo valore, ma crea e restituisce un nuovo riferimento BigInteger senza modificare il BigInteger corrente e questo è ciò che viene fatto anche nel caso di Stringhe

Biginteger è una class immutabile. Devi assegnare in modo esplicito il valore del tuo output per sumre in questo modo:

 sum = sum.add(BigInteger.valueof(i)); 

In realtà puoi usare,

 BigInteger sum= new BigInteger("12345"); 

per la creazione di oggetti per la class BigInteger. Ma il problema qui è che non puoi dare una variabile tra virgolette. Quindi dobbiamo usare il metodo valueOf () e dobbiamo memorizzare nuovamente la risposta in quella sum. Quindi scriveremo,

 sum= sum.add(BigInteger.valueOf(i)); 

Poiché si sumno alcuni valori int insieme, non è necessario utilizzare BigInteger. è abbastanza per questo. int è 32 bit, mentre long è 64 bit, che può contenere la sum di tutti i valori int.