J'ai ce morceau de code qui ne fonctionne pas:
BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
if (isPrim(i)) {
sum.add(BigInteger.valueOf(i));
}
}
La variable somme est toujours 0. Que fais-je mal?
java
biginteger
cc.
la source
la source
int
, vous n'avez donc pas besoinBigInteger
de cet exemple.Réponses:
BigInteger
est immuable. Les javadocs indiquent que add () "[r] et renvoie un BigInteger dont la valeur est (this + val)." Par conséquent, vous ne pouvez pas changersum
, vous devez réaffecter le résultat de laadd
méthode àsum
variable.la source
La
BigInteger
classe est immuable, vous ne pouvez donc pas changer son état. Donc, appeler "add" crée un nouveauBigInteger
, plutôt que de modifier le courant.la source
D'autres réponses l'ont cloué; BigInteger est immuable. Voici la modification mineure pour que ce code fonctionne.
la source
BigInteger est une classe immuable. Ainsi, chaque fois que vous faites de l'arithmétique, vous devez réaffecter la sortie à une variable.
la source
java.math.BigInteger
est une classe immuable , nous ne pouvons donc pas affecter de nouvel objet à l'emplacement de l'objet déjà attribué. Mais vous pouvez créer un nouvel objet pour attribuer une nouvelle valeur comme:la source
Oui c'est immuable
donc la méthode add () de la classe BigInteger n'ajoute pas de nouvelle valeur BigIntger à sa propre valeur, mais crée et retourne une nouvelle référence BigInteger sans changer le BigInteger actuel et c'est ce qui est fait même dans le cas de Strings
la source
En fait, vous pouvez utiliser,
pour créer un objet pour la classe BigInteger.Mais le problème ici est que vous ne pouvez pas donner de variable entre guillemets doubles.Nous devons donc utiliser la méthode valueOf () et nous devons à nouveau stocker la réponse dans cette somme.Nous allons donc écrire,
la source
Biginteger
est une classe immuable. Vous devez attribuer explicitement la valeur de votre sortie à la somme comme ceci:la source
Puisque vous résumez ensemble certaines valeurs int, il n'est pas nécessaire d'utiliser BigInteger.
long
suffit pour cela.int
est de 32 bits, tandis que delong
64 bits, qui peut contenir la somme de toutes les valeurs int.la source