Вычислить среднее значение (grade) с использованием HashMap в Java

#java #hashmap #average

#java #hashmap #среднее

Вопрос:

Привет, я пытаюсь вычислить среднее значение из данных на карте.

Сначала в коде есть класс Student, в котором создается … ну, студент со следующими параметрами: String FirstName, String LastName, int registerDiaryNumber.

Также переопределяются методы equals, hashCode и toString.

Затем создается класс Grade, который принимает 8 int в качестве параметра (всего 8 оценок)

Наконец, в main есть этот фрагмент кода:

 public static void main (String[] args) {

Student student1 = new Student("Terry", "Pratchett", 2);
Student student2 = new Student("Arashi", "Ryuuno", 3);
Student student3 = new Student("Nobunaga", "Oda", 4); 
Student student4 = new Student("Pheonix", "Wright", 5);
Student student5 = new Student("Ainz", "Gown", 1);

Grades student1Math = new Grades(4, 5, 4, 3, 2, 5, 5, 3);
Grades student2Math = new Grades(5, 6, 5, 5, 6, 5, 5, 4);
Grades student3Math = new Grades(3, 3, 5, 4, 3, 4, 5, 2);
Grades student4Math = new Grades(5, 4, 5, 3, 4, 5, 3, 5);
Grades student5Math = new Grades(4, 5, 5, 3, 3, 4, 6, 5);

Map<Student, Grades> mathGrades = new HashMap<>();
mathGrades.put(student1, student1Math);
mathGrades.put(student2, student2Math);
mathGrades.put(student3, student3Math);
mathGrades.put(student4, student4Math);
mathGrades.put(student5, student5Math);

for (Map.Entry<Student, Grades> entry : mathGrades.entrySet()){
    System.out.println("Number "   entry.getKey()  " got grades as follow:"  entry.getValue());
    System.out.println("Student average grade is: ");
    }
}
  

И вот где я застрял — я понятия не имею, как рассчитать среднее значение по заданным оценкам, я попытался поместить методы в класс grade, но это не сработало.
Если вы хотите проверить весь код, пожалуйста, проверьте ссылку ниже (это задание от JAVA bootcamp, и в нем говорится: «используя HashMap, создайте программу, которая будет хранить (личные) данные учащихся и их оценки. Программа должна показывать среднюю оценку каждого учащегося.»
Среднее значение может быть либо int, либо double (округленным).

https://kodilla.com/pl/project-java/173235#

Комментарии:

1. Необычно, что Grades это не поле в классе Student , а существует свободно. Однако было бы полезно ответить на ваш вопрос, если бы вы могли включить классы Grades и Student в свой вопрос.

Ответ №1:

Вам нужно изменить конструктор Grade класса, который принимает, например, List целые числа.

Решение проблемы будет таким простым, как следующее:

 public static void main(String[] args) {
    Student student1 = new Student("Terry", "Pratchett", 2);
    Student student2 = new Student("Arashi", "Ryuuno", 3);
    Student student3 = new Student("Nobunaga", "Oda", 4);
    Student student4 = new Student("Pheonix", "Wright", 5);
    Student student5 = new Student("Ainz", "Gown", 1);

    // A static initialization of a list of integers
    Grades student1Math = new Grades(new ArrayList<Integer>() {{
        add(5);
        add(6);
        add(5); // add more here...
    }});
    Grades student2Math = new Grades(new ArrayList<Integer>() {{
        add(5);
        add(6);
        add(5);
    }});
    Grades student3Math = new Grades(new ArrayList<Integer>() {{
        add(3);
        add(3);
        add(5);
    }});
    Grades student4Math = new Grades(new ArrayList<Integer>() {{
        add(5);
        add(4);
        add(5);
    }});
    Grades student5Math = new Grades(new ArrayList<Integer>() {{
        add(4);
        add(5);
        add(5);
    }};

    Map<Student, Grades> mathGrades = new HashMap<>();
    mathGrades.put(student1, student1Math);
    mathGrades.put(student2, student2Math);
    mathGrades.put(student3, student3Math);
    mathGrades.put(student4, student4Math);
    mathGrades.put(student5, student5Math);

    for (Map.Entry<Student, Grades> entry : mathGrades.entrySet()){
        double currentStudentAvgSum = 0.0;
        
        List<Integer> studentGrades = mathGrades.get(entry.getKey());
        for(Dobule currentGrade : studentGrades){
            currentStudentAvgSum   = currentGrade;
        }
        double currentStudentAvg = currentStudentAvgSum / studentGrades.size();
        
        System.out.println("Student average grade is: "   currentStudentAvg);
    }
}
  

И цикл for вычисляет средние баллы для каждого учащегося.