Явно умножая значения как длинные - PullRequest
0 голосов
/ 03 апреля 2010

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

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

Ответы [ 4 ]

9 голосов
/ 03 апреля 2010

Поменяет первую строку на следующую:

long result = 1L;

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

6 голосов
/ 03 апреля 2010

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

3 голосов
/ 03 апреля 2010

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

2 голосов
/ 03 апреля 2010

Вы выдаете ложь в этой строке:

long result = 0L;

Вы умножаете все на 0, что всегда равно 0. Попробуйте:

long result = 1L;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...