Как найти максимум и минимум в массиве
Короткий ответ
Поток по массиву чисел умеет находить максимум и минимум:
void main() {
int[] numbers = {7, 2, 9, 4};
IO.println(Arrays.stream(numbers).max().getAsInt());
IO.println(Arrays.stream(numbers).min().getAsInt());
}Результат:
9
2Всё сразу
summaryStatistics() за один проход считает минимум, максимум, сумму и среднее:
void main() {
int[] numbers = {7, 2, 9, 4};
IntSummaryStatistics stats = Arrays.stream(numbers).summaryStatistics();
IO.println(stats.getMin() + " " + stats.getMax() + " " + stats.getAverage());
}Результат:
2 9 5.5Циклом
Классический способ: запомнить первый элемент и сравнивать с ним остальные:
void main() {
int[] numbers = {7, 2, 9, 4};
int max = numbers[0];
for (int n : numbers) {
if (n > max) {
max = n;
}
}
IO.println(max);
}Результат:
9Массив объектов
Для объектов передайте компаратор по нужному полю:
record Product(String name, double price) {}
void main() {
Product[] products = {new Product("Tea", 3.5), new Product("Cake", 12.0), new Product("Water", 1.2)};
Product cheapest = Arrays.stream(products).min(Comparator.comparingDouble(Product::price)).orElseThrow();
IO.println(cheapest.name());
}Результат:
WaterЧастая ошибка
Начать поиск максимума с нуля. Если все числа отрицательные, ответ получится неверным:
void main() {
int[] numbers = {-5, -2, -9};
int max = 0;
for (int n : numbers) {
max = Math.max(max, n);
}
IO.println(max);
}Результат:
0Начинайте с первого элемента массива или с Integer.MIN_VALUE.
Функции из этого ответа
- Arrays.stream() — Создаёт поток (stream) из массива — для сумм, фильтров и преобразований.
- IntStream.average() — Вычисляет среднее арифметическое чисел потока.
- Collections.max() — Находит наибольший элемент коллекции.
- Math.max() — Возвращает большее из двух чисел.