#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 (округленным).
Комментарии:
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 вычисляет средние баллы для каждого учащегося.