Tengo este fragmento de 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 suma es siempre 0. ¿Qué estoy haciendo mal?
java
biginteger
cc.
fuente
fuente
int
, por lo que no es necesarioBigInteger
para este ejemplo.Respuestas:
BigInteger
Es inmutable. El javadocs establece que add () "[r] genera un BigInteger cuyo valor es (this + val)". Por lo tanto, no puede cambiarsum
, debe reasignar el resultado deladd
método asum
variable.fuente
La
BigInteger
clase es inmutable, por lo tanto, no puede cambiar su estado. Por lo tanto, llamar a "agregar" crea un nuevoBigInteger
, en lugar de modificar el actual.fuente
Otras respuestas lo han clavado; BigInteger es inmutable. Aquí está el cambio menor para que ese código funcione.
fuente
BigInteger es una clase inmutable. Por lo tanto, cada vez que realice una aritmética, debe reasignar la salida a una variable.
fuente
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:fuente
Si es inmutable
entonces 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
fuente
En realidad puedes usar,
para crear objetos para la clase BigInteger. Pero el problema aquí es que no puede dar una variable entre comillas dobles. Por lo tanto, tenemos que usar el método valueOf () y tenemos que almacenar la respuesta en esa suma nuevamente. Entonces escribiremos,
fuente
Biginteger
Es una clase inmutable. Debe asignar explícitamente el valor de su salida para sumar así:fuente
Dado que están sumando algunos valores int juntos, no es necesario usar BigInteger.
long
es suficiente para esoint
es de 32 bits, mientras quelong
es de 64 bits, que puede contener la suma de todos los valores int.fuente