variable usar suma resta numeros grandes funciona convertir como java biginteger

suma - usar numeros grandes en java



Java: ¿Cómo usar BigInteger? (9)

Tengo este código, que no funciona:

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

La variable de suma siempre es 0. ¿Qué estoy haciendo mal?


BigInteger es una clase inmutable. Entonces, cada vez que haga una aritmética, debe reasignar la salida a una variable.


Como está sumando algunos valores int, no es necesario utilizar BigInteger. long es suficiente para eso. int es 32 bits, mientras que long es 64 bits, que puede contener la suma de todos los valores int.


En realidad puedes usar,

BigInteger sum= new BigInteger("12345");

para crear objetos para la clase BigInteger. Pero el problema aquí es que no se puede dar una variable en las comillas dobles. Así que tenemos que usar el método valueOf () y tenemos que almacenar la respuesta en esa suma de nuevo. Así que escribiremos,

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


Otras respuestas lo han clavado; BigInteger es inmutable. Aquí está el pequeño cambio para que el código funcione.

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


Sí, es inmutable

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

por lo que el método add () de la clase BigInteger no agrega un nuevo valor BigIntger a su propio valor, sino que crea y devuelve una nueva referencia BigInteger sin cambiar el BigInteger actual y esto es lo que se hace incluso en el caso de Strings


BigInteger es inmutable. Los javadocs indican que add() "[r] crea un BigInteger cuyo valor es (this + val)". Por lo tanto, no puede cambiar la sum , necesita reasignar el resultado del método add a la variable sum .

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


Biginteger es una clase inmutable. Necesita asignar explícitamente el valor de su salida a la suma de esta manera:

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


java.math.BigInteger es una clase inmutable , por lo que no podemos asignar un nuevo objeto en la ubicación del objeto ya asignado. Pero puede crear un nuevo objeto para asignar un nuevo valor como:

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


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

La clase BigInteger es inmutable, por lo tanto, no puede cambiar su estado. Entonces, al llamar "agregar" se crea un nuevo BigInteger , en lugar de modificar el actual.