Среднее арифметическое - Вопросы
Всего: 5 вопросов
1. Как найти среднее арифметическое массива в Java одной строкой?
Как найти среднее арифметическое массива в Java одной строкой?
Через Stream API: Arrays.stream(nums).average().orElse(0). Метод average() работает для массивов int[], long[] и double[] и возвращает OptionalDouble, а orElse(0) задаёт значение по умолчанию для пустого массива.
2. Почему для массива {1, 2, 3, 4} при вычислении среднего получается 2 вместо 2.5?
Почему для массива {1, 2, 3, 4} при вычислении среднего получается 2 вместо 2.5?
Потому что и сумма, и длина массива имеют тип int, а деление двух int в Java целочисленное: дробная часть отбрасывается. Чтобы получить точный результат, приведите один из операндов к double: (double) sum / nums.length.
3. Что вернёт метод average() для пустого массива и чем это отличается от решения через цикл?
Что вернёт метод average() для пустого массива и чем это отличается от решения через цикл?
Пустой OptionalDouble, потому что среднее нуля элементов не определено. Значение по умолчанию задаётся через orElse(). Решение через цикл для пустого массива double[] вычислит 0.0 / 0 и молча вернёт NaN.
4. Есть ли готовый метод average() в классе Math или Arrays?
Есть ли готовый метод average() в классе Math или Arrays?
Нет. В java.lang.Math и java.util.Arrays такого метода нет. Стандартный способ — Arrays.stream(nums).average(), то есть метод average() у примитивных стримов IntStream, LongStream и DoubleStream.
5. Как избежать переполнения при суммировании большого массива int[] для вычисления среднего?
Как избежать переполнения при суммировании большого массива int[] для вычисления среднего?
Сумма большого количества больших значений int может выйти за пределы диапазона int, и результат станет некорректным без каких-либо ошибок. Надёжнее накапливать сумму в переменной типа long либо использовать Stream API: для IntStream метод average() суммирует в long.