Java HashMap<;整数,对象>;正在为所有关键点指定相同的值

Java HashMap<;整数,对象>;正在为所有关键点指定相同的值,java,object,hashmap,Java,Object,Hashmap,所以我这里有一段代码,它创建了一个名为student的对象,它以字符串作为名称和专业,并跟踪总学分和质量分数来计算GPA。我试图创建一个HashMap,以便能够使用键(student ID)搜索学生,并使用student blueprint类返回保留的值。但是我的代码给所有键分配了相同的值,即最后一个进入HashMap的学生。下面是当前输出后面的代码。请注意,这是我完整代码的简化版本,只是为了展示我遇到的问题。感谢所有愿意帮忙的人 import java.util.HashMap; publi

所以我这里有一段代码,它创建了一个名为student的对象,它以字符串作为名称和专业,并跟踪总学分和质量分数来计算GPA。我试图创建一个HashMap,以便能够使用键(student ID)搜索学生,并使用student blueprint类返回保留的值。但是我的代码给所有键分配了相同的值,即最后一个进入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());
}
}
import java.util.HashMap;
公开课考试{
公立静态班学生{
静态私有字符串名;
静态私有字符串专业;
静态私有积分;
静态私有inttotalqp;
公立学生(字符串名称,字符串专业){
this.name=名称;
this.major=major;
此值为0.totalCredits=0;
此值为0.totalQP=0;
}
公共静态无效课程完成(国际学分,国际学分小时){
总QP+=等级;
总学分+=学分小时数;
}
@凌驾
公共字符串toString(){
浮动GPA;
如果(总积分!=0){
GPA=(浮动)总QP/总学分;
}否则{
GPA=(浮动)4.0;
}
返回“学生姓名:“+name+”\n学生专业:“+Major”
+“\n学生平均成绩:”+GPA;
}
}
公共静态void main(字符串[]args){
HashMap studentDatabase=新建HashMap();
studentDatabase.put(1234,新学生(“默认”,“默认”));
学生数据库。put(7623,新生(“菲利斯·琼斯”,“英语”);
学生数据库。put(8729,新生(“克莱特斯·史密斯”,“历史”);
学生数据库。put(7321,新生(“贝蒂·布斯”,“计算机科学”);
学生数据库.put(3242,新生(“塞缪尔·塞布赖特”,“历史”);
学生数据库。put(9823,新生(“奥斯卡蓝”,“英语”));
studentDatabase.put(2341,新生(“萨利·格里菲”,“计算机科学”);
学生数据库。put(8321,新生(“雅克·马切尔”,“数学”);
System.out.println(studentDatabase.entrySet());
}
}
输出: [8321=学生姓名:Jacques Matchel 学生专业:数学 学生平均成绩:4.01234=学生姓名:Jacques Matchel 学生专业:数学 学生平均成绩:4.02341=学生姓名:Jacques Matchel 学生专业:数学 学生平均成绩:4.07623=学生姓名:Jacques Matchel 学生专业:数学 学生平均成绩:4.08729=学生姓名:Jacques Matchel 学生专业:数学 学生平均成绩:4.07321=学生姓名:Jacques Matchel 学生专业:数学 学生平均成绩:4.03242=学生姓名:Jacques Matchel 学生专业:数学 学生平均成绩:4.09823=学生姓名:Jacques Matchel 学生专业:数学
学生平均成绩:4.0]

不要使用
静态
字段。更多详细信息。Student的每个实例都引用相同的四个成员值,因为它们被声明为静态。从学生成员变量中删除static。学生类中的所有字段都是静态的。删除静态和一切都应该工作,我想你需要这个。名称和这个。主要的toString函数修复它。我爱你们所有人。对不起,我不擅长诚实地编码。