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. Qu'est-ce que je fais mal?
BigInteger
est immuable. Les javadocs indiquent que add () "[r] convertit un BigInteger dont la valeur est (this + val)." Par conséquent, vous ne pouvez pas modifier sum
, vous devez réaffecter le résultat de la méthode add
à la variable sum
.
sum = sum.add(BigInteger.valueOf(i));
sum = sum.add(BigInteger.valueOf(i))
La classe BigInteger
est immuable, vous ne pouvez donc pas changer son état. Donc, appeler "add" crée un nouveau BigInteger
, plutôt que de modifier le courant.
D'autres réponses l'ont cloué; BigInteger est immuable. Voici le changement mineur pour que ce code fonctionne.
BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
if (isPrim(i)) {
sum = sum.add(BigInteger.valueOf(i));
}
}
Java.math.BigInteger
est une classe immuable, nous ne pouvons donc pas affecter de nouvel objet à l'emplacement de l'objet déjà affecté. Mais vous pouvez créer un nouvel objet pour assigner une nouvelle valeur comme:
sum = sum.add(BigInteger.valueOf(i));
BigInteger est une classe immuable. Donc, chaque fois que vous faites de l'arithmétique, vous devez réaffecter la sortie à une variable.
Oui c'est immuable
sum.add(BigInteger.valueOf(i));
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 que dans le cas de Strings
En fait, vous pouvez utiliser,
BigInteger sum= new BigInteger("12345");
pour créer un objet pour la classe BigInteger.Mais le problème est que vous ne pouvez pas donner de variable entre guillemets.Ainsi, nous devons utiliser la méthode valueOf () et stocker la réponse dans cette somme. donc on écrira,
sum= sum.add(BigInteger.valueOf(i));
Biginteger
est une classe immuable. Vous devez attribuer explicitement la valeur de votre sortie à la somme de la manière suivante:
sum = sum.add(BigInteger.valueof(i));