2016-04-30 123 views
2

我是新来的,不要在开始时杀死我。 我的代码应该创建学生并计算他的平均成绩。 一切都好,直到我试图添加另一个学生。 来自主Map的关键字不同,但是来自innerMap的主题的平均值被覆盖。JavaFX - 多维hashmap被覆盖

如果我创造几个学生,他们每个人都有不同的名字(主),但平均值相同(我添加了最新的)。

我'创造了这种风格包含HashMap:

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); 

keyMap for mainMap is String with name and name of student。

另外,我为我的语言表示歉意。 感谢您的时间!

回答

1

很难从您的代码中知道,但由于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); 
}