我是新来的,一开始不要杀了我。
我的代码应创建学生并计算其平均成绩。
一切正常,直到我尝试添加另一个学生。
来自主图的键是不同的,但是来自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);
}