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?
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?
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 changer sum
, vous devez réaffecter le résultat de la add
méthode à sum
variable.
sum = sum.add(BigInteger.valueOf(i));
BigInteger est une classe immuable. Ainsi, 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 qui est fait même 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 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,
sum= sum.add(BigInteger.valueOf(i));
Biginteger
est une classe immuable. Vous devez attribuer explicitement la valeur de votre sortie à la somme comme ceci:
sum = sum.add(BigInteger.valueof(i));
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 de long
64 bits, qui peut contenir la somme de toutes les valeurs int.
int
, vous n'avez donc pas besoinBigInteger
de cet exemple.