2010-04-03 5 views
0

Je comprends que tous les calculs sont effectués comme le plus grand type de données requis pour gérer les valeurs actuelles, mais lorsque vous faites une boucle transversale, comment multipliez-vous explicitement les longs? Le code suivant renvoie 0, je suppose, à cause d'un débordement.Multiplier explicitement les valeurs en tant que valeurs longues

long result = 0L; 
List<Long> temp = (List<Long>) getListOfIntegers(); 
for (int i = 0; i < temp.size(); i++) { 
    result *= temp.get(i).longValue(); 
} 
System.out.println(result); 
+1

Aucun débordement ne se passe ici - juste un bug qui, j'en suis sûr, a mordu tout le monde au moins une fois ... Et faites attention qu'il n'y ait pas de zéros dans la liste (ou que vous les manipuler correctement, s'ils ont besoin d'une main exceptionnelle lingue). –

Répondre

9

Modification de la première ligne en ce qui suit va vous aider:

long result = 1L; 

En multipliant par 0 vous donnera 0 :)

6
résultat

est zéro parce qu'il commence à zéro, et la multiplication zéro par quoi que ce soit aboutit à zéro.

+2

FFFFFUUUUUUUUUUU! merci – threadhack

+0

Vous pourriez essayer le point flottant; ça fait toutes sortes de trucs bizarres que vous n'attendez pas; =) – WhirlWind

2

question Vous est dans cette ligne:

long result = 0L; 

Vous multipliant tout par 0, ce qui est toujours 0. Essayez:

long result = 1L; 
3

La boucle retourne 0 parce que vous résultat initialisés avec 0 0 * x = 0.

Questions connexes