我是新来的,一开始不要杀了我。
我的代码应创建学生并计算其平均成绩。
一切正常,直到我尝试添加另一个学生。
来自主图的键是不同的,但是来自innerMap的主题的平均值被覆盖。

如果我要培养的学生很少,那么每个人的名字(主要)都不同,但平均数却相同(我添加的最新值)。

我正在以这种风格创建HashMaps:

Map<String, HashMap<String, Double>> mainMap = new HashMap<String, HashMap<String, Double>>();
Map<String, Double> innerMap = new HashMap<String, Double>();


并且我使用此映射创建了类的实例以获取静态访问权限:

private static AvgLists instance = new AvgLists();

public static mapClass getInstance() {
    return instance;
}


在另一个类中,我创建了在地图中添加值的方法:

innerMap.put(subject, grade);
 mainMap.put(key, innerMap);


mainMap的关键字是具有学生姓名和姓氏的字符串。

另外,我对自己的语言表示歉意。
感谢您的宝贵时间!

最佳答案

很难从代码中看出来,但是由于两个Map似乎都是字段,因此很可能只对所有学生使用一张地图。不过,您需要为每个学生创建新的地图:

Map<String, Map<String, Double>> mainMap = new HashMap<>();

void setGrade(String studentName, String courseName, double average) {
    // create new inner map, if there is none for this student
    Map<String, Double> innerMap = mainMap.computeIfAbsent(studentName, s -> new HashMap<>());

    // add grade to map for student
    innerMap.put(courseName, average);
}

07-24 14:27