Професионална програма
Loading...
+ Нов въпрос
zdravkostov avatar zdravkostov 4 Точки

Java, 7. Student Academy

Условия:
https://softuni.bg/trainings/resources/officedocument/56688/exercise-problem-descriptions-java-fundamentals-january-2021/3212


package JavaFundamentals;

import java.util.*;

public class StudentAcademy {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        int n = Integer.parseInt(scan.nextLine());
        Map<String, List<Double>> gradesOfStudents = new HashMap<>();
        String person;
        double grade;

        for (int i = 0; i < n; i++) {
            person = scan.nextLine();
            grade = Double.parseDouble(scan.nextLine());

            if (!gradesOfStudents.containsKey(person)) {
                gradesOfStudents.put(person, new ArrayList<>());
            }
            gradesOfStudents.get(person).add(grade);
        }

        double average;
        Map<String, Double> averageGrades = new HashMap<>();

        for (Map.Entry<String, List<Double>> entry : gradesOfStudents.entrySet()) {
            average = 0;
            for (int i = 0; i < entry.getValue().size(); i++) {
                average = average + entry.getValue().get(i);
            }
            average = average / entry.getValue().size();
            if (average >= 4.5) {
                averageGrades.put(entry.getKey(), average);
            }
        }

        averageGrades.entrySet().stream().sorted((d1, d2) -> Double.compare(d1.getValue().compareTo(d2.getValue()))).forEach(name -> {
            System.out.print(name.getKey() + " -> ");
            System.out.printf("%.2f %n", name.getValue());
        });
    }
}

Грешката е в ето този ред:
.sorted((d1, d2) -> Double.compare(d1.getValue().compareTo(d2.getValue())))
1
Java Fundamentals
MartinBG avatar MartinBG 3972 Точки
Best Answer

Компараторът може да се напише по много начини:

 

.sorted((d1, d2) -> Double.compare(d2.getValue(), d1.getValue()))

 

.sorted((d1, d2) -> d2.getValue().compareTo(d1.getValue()))

 

.sorted((d1, d2)  -> Comparator.<Double>reverseOrder().compare(d1.getValue(), d2.getValue()))

 

.sorted(Comparator.comparingDouble(kvp -> -kvp.getValue()))

 

.sorted(Entry.comparingByValue(Comparator.reverseOrder()))

 

За да мине задачата, трябва да промените и типа на gradesOfStudents и averageGrades от HashMap на LinkedHashMap, тъй като при еднакъв среден успех се очаква студентите да бъдат сортирани по реда на въвеждането им:

Map<String, List<Double>> gradesOfStudents = new LinkedHashMap<>();

Map<String, Double> averageGrades = new LinkedHashMap<>();

 

1
28/03/2021 19:01:47