2016-04-30 7 views
2

Ich bin neu hier und töte mich nicht am Anfang. Mein Code sollte Schüler erstellen und seinen Durchschnittsdurchschnitt zählen. Alles ist in Ordnung, bis ich versuche, einen anderen Schüler hinzuzufügen. Key von Haupt Map ist anders, aber Durchschnitt von Themen aus InnerMap werden überschrieben.JavaFX - Multidimensionales hashmap wird überschrieben

Wenn ich einige Studenten schaffe, haben alle von ihnen einen anderen Namen (Haupt), aber den gleichen Durchschnitt (am längsten, den ich hinzugefügt habe).

Ich bin HashMaps in diesem Stil zu schaffen:

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

und ich erstellte Instanz meiner Klasse mit dieser Karte statischen Zugang zu bekommen:

private static AvgLists instance = new AvgLists(); 

public static mapClass getInstance() { 
    return instance; 
} 

In einer anderen Klasse I-Verfahren für Add erstellt Werte in der Karte:

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

Schlüssel für mainMap ist String mit Vor- und Nachnamen des Schülers.

Auch ich entschuldige mich für meine Sprache. Vielen Dank für Ihre Zeit!

Antwort

1

Es ist schwer zu sagen von Ihrem Code, aber da beide Map s scheinen Felder zu sein, ist es wahrscheinlich, dass Sie nur eine einzige Karte für alle Schüler verwenden. Sie müssen jedoch für jeden Schüler neue Karten erstellen:

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