我有一个问题要解决哪个学生名单的平均分数低于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
答案 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);
}
}