使用 hashmap 的归国学生名单低于平均 60

Returning students list below average 60 using hashmap

我有一个问题要解决获取平均分数低于60的学生名单。如果有逻辑请帮助我纠正。

我在合并不同课程的记录时遇到问题。这是我的输入和逻辑。

public ArrayList<String> getbadstudents(HashMap<String,HashMap<String,ArrayList<int>>> hm){
        double avg=0.0;

        ArrayList<String> as=new ArrayList<>();
        HashMap<String,ArrayList<int>> hp=new HashMap<>();
        //MERGING KEYS FROM COURSES
        for(map.entry<String,HashMap<String,ArrayList<int>>> x:hm.getentryset()){

        HashMap<String,ArrayList<int>> hk=x.getvalue();
        for(map.entry<String,ArrayList<int>> y:hk.getentryset())
           //MERGE SAME KEYS FROM DIFFERENT COURSES
            hp.putall(y.getkey(),y.getvalue());
           }
        }
    //CALCULATING AVG FROM THE MERGED KEYS
for(map.entry<String,ArrayList<int>> y:hp.getentryset())
            int sum=0;
            ArrayList<integer> al=x.getvalue();
            for(int z:al)
            sum+=z;
            avg=sum/al.size();
            if(avg<60){
          as.add(x.getkey());

}
            return as;
}

输入-

cs480   Lilly   20  30  70  
        Peter   50  40  50  
        John    70  50  70  
_____________________________

cs457   Lilly   30  70  50  
        Peter   40  60  75  
_____________________________

cs503   Lilly   40  30  20  
        Peter   70  65  35  
        John    40  55  25  

如果你真的想像你说的那样解决这个问题(没有好的数据结构),你必须这样做:

 for(map.entry<String,ArrayList<Integer>> y:hk.getentryset()){
    List<Integer> allScores;
    if(hp.get(y.getKey())==null){
        allScores = new ArrayList<>();
        hp.put(key, allScores);
    }
    else{
        allScores = hp.get(y.getKey());
    }
    allScores.addAll(y.getvalue());
}

给你,我给你一个代码可以帮助你,你应该为你的问题实施这个代码 找到低于 60 的平均值。我已经在一个问题中举了我的例子,所以你最好去做。

import java.util.*;

public class QueQue {

public static float getAverage(HashMap<String, ArrayList<Integer>> hm, String name) {
    ArrayList<Integer> scores;
    scores = hm.get(name);
    if (scores == null) {
        System.out.println("NOT found");
    }

    int sum = 0;
    for (int x : scores) {
        sum += x;
    }
    return (float) sum / scores.size();
}

public static ArrayList<String> getBadStudents(HashMap<String, ArrayList<Integer>> hm) {

    ArrayList<String> list = new ArrayList();

    for (Map.Entry<String, ArrayList<Integer>> x : hm.entrySet()) {
        String name = x.getKey();
        double average = getAverage(hm, name);
        if (average < 8) {
            list.add(name);
        }

    }

    return list;
}

public static void main(String[] args) {
    HashMap<String, ArrayList<Integer>> hm = new HashMap<>();
    hm.put("Peter", new ArrayList<>());
    hm.get("Peter").add(10);
    hm.get("Peter").add(10);
    hm.get("Peter").add(10);

    hm.put("Nancy", new ArrayList<>());
    hm.get("Nancy").add(7);
    hm.get("Nancy").add(8);
    hm.get("Nancy").add(8);

    hm.put("Lily", new ArrayList<>());
    hm.get("Lily").add(9);
    hm.get("Lily").add(9);
    hm.get("Lily").add(8);

    ArrayList<String> foo = getBadStudents(hm);
    System.out.println(foo);

}

 }