使用hashmap返回的学生列表低于平均值60

时间:2015-07-24 05:41:44

标签: java 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  

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

在这里,我给你一个代码,它将帮助你,你应该为你的问题实现这个代码找到低于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);

}

 }