2010-04-03 2 views
0

Я понимаю, что вся математика выполнена как самый большой тип данных, необходимый для обработки текущих значений, но когда вы пересекаете цикл, как вы явно умножаете длинные? Следующий код возвращает 0, я подозреваю, из-за переполнения.Явное умножение значений как longs

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

Переполнение не происходит - просто ошибка, которую я уверен, укусил всех по крайней мере один раз ... И позаботьтесь о том, чтобы в списке не было нулей (или что вы обрабатывайте их правильно, если им нужна исключительная рука лин). –

ответ

9

Изменение первой строки в следующем поможет:

long result = 1L; 

Как умножении на 0 даст вам 0 :)

6

результат равен нулю, так как она начинается как ноль, и умножения ноль ничем не приводит к нулю.

+2

FFFFFUUUUUUUUUU! thanks – threadhack

+0

Вы можете попробовать с плавающей запятой; он делает всевозможные странные вещи, которых вы не ожидаете; =) – WhirlWind

2

Вы проблема заключается в этой строке:

long result = 0L; 

Вы умножая все на 0, который всегда равен 0. Try:

long result = 1L; 
3

Цикл возвращает 0, потому что вы инициализирован результат с 0 0 * x = 0.

Смежные вопросы