2016-04-30 9 views
2

ここで私は初めてです。 私のコードは生徒を作成し、卒業生の平均を数える必要があります。 私はもう一人の生徒を追加しようとするまで、大丈夫です。 メイン・マップのキーは異なりますが、innerMapのサブジェクトからの平均が上書きされます。JavaFX - 多次元ハッシュマップが上書きされます

生徒の数が少ない場合、その人は誰でも名前は変わりますが、平均は同じです(最後に追加したもの)。

このスタイルでハッシュマップを作成I'am:

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

Key for mainMapは、学生の名前と姓の文字列です。

また、私は自分の言葉を謝ります。 ありがとうございます!

答えて

1

あなたのコードからは分かりにくいですが、Mapの両方がフィールドであるように見えるので、すべての学生に1つのマップを使用するだけです。あなたはすべての学生のための新しい地図を作成する必要があります:

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