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.