Почему не срабатывает поиск максимального значения в ArrayList
Сразу скажу что нашел тему с правильным кодом, но не понимаю почему не срабатывает мой. Прошу отнестись с пониманием так как я только учусь.
Требуется найти в списке максимальное значение. Мой код:
package com.JavaLearning;
import java.util.ArrayList;
public class Sprint1 {
public static void main(String[] args) {
ArrayList<Double> temperatures = new ArrayList<>();
temperatures.add(92.3);
temperatures.add(12.4);
temperatures.add(74.1);
temperatures.add(45.0);
double max = 0;
for (double i = 0; i < temperatures.size(); i++) {
if (i > max) {
max = i;
}
}
System.out.println(max);
}
}
Код почему-то отображает общее количество значений в списке а не большее из них.
Я нашел как изменить код в этой теме: Как найти максимальное и минимальное значения в ArrayList
Если заменить содержимое цикла for на (Double i: temperatures) то всё срабатывает как надо, однако, в лекции по моему заданию используется именно подобное написание цикла for (double i = 0; i < temperatures.size(); i++).
Помогите, пожалуйста, разобраться что я сделал не так в своём варианте кода?
Ответы (1 шт):
Потому что i у вас не температура, а фактически счетчик цикла (меняется от 0 до temperatures.size() - 1). В итоге у вас выводит не максимум температуры, а максимум счетчика, который равен 3.
Чтобы максимум температуры считать, вам нужно брать из списка значение по этому индексу.
Исправленный цикл:
double max = 0;
for (int i = 0; i < temperatures.size(); i++) {
double temperature = temperatures.get(i);
if (temperature > max) {
max = temperature;
}
}
Это будет эквивалентно такому циклу:
double max = 0;
for (double temperature: temperatures) {
if (temperature > max) {
max = temperature;
}
}