Итак, у меня есть этот код, который создает объект под названием student, который принимает строки для имени и специальности и отслеживает общее количество кредитов и баллов качества для расчета GPA. Я пытаюсь создать HashMap, чтобы иметь возможность искать студентов по ключу (идентификатору студента) и возвращать значения, хранящиеся в классе «Студенческий план». Но мой код назначает одно и то же значение всем ключам, последний ученик вошел в HashMap. Вот код, за которым следует текущий вывод. Обратите внимание, что это упрощенная версия моего полного кода, просто чтобы продемонстрировать мою проблему. Спасибо всем, кто хочет помочь!
import java.util.HashMap;
public class Test {
public static class Student {
static private String name;
static private String major;
static private int totalCredits;
static private int totalQP;
public Student (String name, String major) {
this.name = name;
this.major = major;
this.totalCredits = 0;
this.totalQP = 0;
}
public static void courseCompleted (int grade, int creditHours) {
totalQP += grade;
totalCredits += creditHours;
}
@Override
public String toString () {
float GPA;
if (totalCredits != 0) {
GPA = (float) totalQP/totalCredits;
} else {
GPA = (float) 4.0;
}
return "Student name: " + name + "\nStudent Major: " + major
+ "\nStudent GPA: " + GPA;
}
}
public static void main (String [] args) {
HashMap<Integer, Student> studentDatabase = new HashMap();
studentDatabase.put(1234, new Student("Default", "Default"));
studentDatabase.put(7623, new Student("Phyllis Jones", "English"));
studentDatabase.put(8729, new Student("Cletus Smith", "History"));
studentDatabase.put(7321, new Student("Betty Booth", "Computer Science"));
studentDatabase.put(3242, new Student("Samuel Seybright", "History"));
studentDatabase.put(9823, new Student("Oscar Blue", "English"));
studentDatabase.put(2341, new Student("Sally Grief", "Copmputer Science"));
studentDatabase.put(8321, new Student("Jacques Matchel", "Mathematics"));
System.out.println(studentDatabase.entrySet());
}
}
Выход:
[8321 = Имя студента: Жак Матчел
Студенческая специальность: математика
Средний балл студента: 4,0, 1234 = Имя студента: Жак Матчел
Студенческая специальность: математика
Средний балл студента: 4.0, 2341 = Имя студента: Жак Матчел
Студенческая специальность: математика
Средний балл студента: 4,0, 7623 = Имя студента: Жак Матчел
Студенческая специальность: математика
Средний балл студента: 4,0, 8729 = Имя студента: Жак Матчел
Студенческая специальность: математика
Средний балл студента: 4,0, 7321 = Имя студента: Жак Матчел
Студенческая специальность: математика
Средний балл студента: 4,0, 3242 = Имя студента: Жак Матчел
Студенческая специальность: математика
Средний балл студента: 4.0, 9823 = Имя студента: Жак Матчел
Студенческая специальность: математика
Средний балл студента: 4,0]