Поскольку для max
установлено значение 0
, а затем max > s.averageGrade
, результаты не будут получены, поскольку 0 всегда меньше среднего. Если вы перевернете больше чем на меньше чем; то способ, которым ваш for l oop работает, распечатает все ответы, так как каждое среднее значение выше, чем ранее вставленное значение.
Вы можете сделать что-то вроде этого, используя java потоки, чтобы найти максимальное значение:
Student s = student.stream().max((m1, m2) -> m1.averageGrade.compareTo(m2.averageGrade)).orElse(null);
if (s != null)
System.out.println("Name: " + s.name + "average grade: " + s.averageGrade);
и измените averageGrade
с примитивного double
на Double
, чтобы мы могли воспользоваться compareTo
UPDATE
Чтобы воспользоваться преимуществом java 8 и сделать поток более оптимизированным, мы можем сделать следующее:
Обновите свой класс ученика с помощью publi c getters
class Student {
private String name;
private Double averageGrade;
public Student(String name, double averageGrade) {
this.name = name;
this.averageGrade = averageGrade;
}
public String getName() {
return this.name;
}
public Double getAverageGrade() {
return this.averageGrade;
}
}
Тогда мы сможем измените код, чтобы найти максимальное среднее значение:
Optional<Student> student = students.stream()
.max(Comparator.comparingDouble(Student::getAverageGrade));
if (student.isPresent()) {
Student s = student.get();
System.out.println("Name: " + s.getName() + "average grade: " + s.getAverageGrade());
}