web-dev-qa-db-fra.com

Comment utiliser BigInteger?

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?

148
cc.

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));
199
MarkPowell
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.

57
Bozho

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));
    }
}
21
Dean J

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));
11
Arvind

BigInteger est une classe immuable. Donc, chaque fois que vous faites de l'arithmétique, vous devez réaffecter la sortie à une variable.

10
Poindexter

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

3
murali krish

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));
0
harry

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));    
0
Arpna Joshi