2009-10-20 5 views
1

je le code suivant à la tête d'une méthode:Problèmes avec java.math.BigInteger

BigInteger foo = BigInteger.valueOf(0); 
BigInteger triNum = BigInteger.valueOf(0); 

//set min value to 1*2*3*4*5*...*199*200. 
BigInteger min = BigInteger.ONE; 
BigInteger temp = BigInteger.ZERO; 
for(int i=1; i<=200; i++) 
{ 
    temp = BigInteger.valueOf(i); 
    min = min.multiply(temp); 
} 
System.out.println(min); 

while(triNum.compareTo(min) <= 0) 
{ 
    foo.add(BigInteger.ONE); 
    triNum = triNum.add(foo); 
    System.out.println("triNum: "+triNum); 
} 

Ceci est censé charger un minimum à une valeur (1 * 2 * 3 * ... * 199 * 200), puis définissez triNum sur le premier * numéro de triangle ** avec une valeur supérieure à min.

Problème, quand je lance la méthode, tout ce que je reçois est une fenêtre de terminal avec une liste de "triNum: 0" défilant sur l'écran ... Je ne vois rien dans mon code (bien qu'il soit complètement possible j'ai fait une erreur, et je suis peu familier avec math.BigInteger), et cela semble pointer vers la classe BigInteger. Quelqu'un voit un bug dans mon code?

.............................................. .................................................. ..........................

* Un numéro de triangle est un nombre qui peut être atteint par: 1 + 2 + 3 + 4 + 5 + 6 + 7 + ...

+4

En dehors de l'erreur avec foo.add, s'il vous plaît remarquez que votre programme prendra beaucoup de temps à fonctionner, alors vous devriez trouver une autre façon de faire ce que vous voulez. Comme indice, il y a une formule facile pour savoir ce que la somme 1 + 2 + 3 + 4 ... + n est sans avoir à ajouter tous les nombres. – schnaader

+0

Très long comme beaucoup plus long que la vie de l'univers (le résultat a 188 chiffres). – starblue

Répondre

9

Regardez

foo.add(BigInteger.ONE); 

Est-ce que cette mise à jour foo? Ou crée-t-il un objet égal à foo+ BigInteger.ONE qui n'est plus utilisé?

+0

Merci beaucoup, cela aurait dû être évident, lol. =) – Jonathan

4

foo est toujours 0. Vous devez modifier cette ligne:

foo.add(BigInteger.ONE); 

à ceci:

foo = foo.add(BigInteger.ONE); 
3
foo.add(BigInteger.ONE); 

Comme BigIntegers sont immuables, vous devez affecter le résultat à nouveau foo :

foo = foo.add(BigInteger.ONE);