Среднее арифметическое - Вопросы

Всего: 5 вопросов

1. 

Как найти среднее арифметическое массива в Java одной строкой?

Через Stream API: Arrays.stream(nums).average().orElse(0). Метод average() работает для массивов int[], long[] и double[] и возвращает OptionalDouble, а orElse(0) задаёт значение по умолчанию для пустого массива.

2. 

Почему для массива {1, 2, 3, 4} при вычислении среднего получается 2 вместо 2.5?

Потому что и сумма, и длина массива имеют тип int, а деление двух int в Java целочисленное: дробная часть отбрасывается. Чтобы получить точный результат, приведите один из операндов к double: (double) sum / nums.length.

3. 

Что вернёт метод average() для пустого массива и чем это отличается от решения через цикл?

Пустой OptionalDouble, потому что среднее нуля элементов не определено. Значение по умолчанию задаётся через orElse(). Решение через цикл для пустого массива double[] вычислит 0.0 / 0 и молча вернёт NaN.

4. 

Есть ли готовый метод average() в классе Math или Arrays?

Нет. В java.lang.Math и java.util.Arrays такого метода нет. Стандартный способ — Arrays.stream(nums).average(), то есть метод average() у примитивных стримов IntStream, LongStream и DoubleStream.

5. 

Как избежать переполнения при суммировании большого массива int[] для вычисления среднего?

Сумма большого количества больших значений int может выйти за пределы диапазона int, и результат станет некорректным без каких-либо ошибок. Надёжнее накапливать сумму в переменной типа long либо использовать Stream API: для IntStream метод average() суммирует в long.

Страница 1 из 1