建立一个学生类,每个学生有一个姓名属性、班级名称属性(String)和考试成绩
属性(int),实例化10个对象先存放到一个list中,要求有三个不同的班级;某次
考试结束后,每个学生都获得了一个考试成绩。请打印出每个班级的总分和平均分
以及人数。
将学生的班级信息提取出来,然后按班级与学生键值配对存放到map中,跟第1题的形式一样,最后统计每个班级对应的学生集合中的每个学生的分数。
该题误点:
这题很多人有一个误点就是if(list.get(i).Class == "一班") 直接这样来判断某个学生的班级信息是否属于“一班”,这样肯定是不行的,你想想学生信息是通过构造器传参进来的,我们怎么知道他是属于哪个班?怎么得到有"一班"的?
所以这里应该用if (m.containsKey(classNumber)) 语句来判断Map中是否包含这个班级的键,若包含就通过m.get(classNumber)方法获得对应的学生信息集合,然后把该学生添加到这个集合中;若不包含就添加一个该班级与一个存放该班级学生信息的list集合的键值进去。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
/**
* @author 小苗
*某中学有若干学生(学生对象放在一个List中),每个学生有一个姓名属性、班级名称
属性(String)和考试成绩属性(int),某次考试结束后,每个学生都获得了一个考试成绩。
请打印出每个班级的总分和平均分。
*/
public class TestListMap {
public void count(List<Student> students){
Map<String, List<Student>> m = new HashMap<String, List<Student>>();
//得到list中的学生的班级信息,按不同的班级添加到Map中
for (int i = 0; i < students.size(); i++) {
Student s = (Student) students.get(i);
String classNumber = s.getClassNumber();
//如果班级存在就将学生添加到该班级对应的学生集合中
if (m.containsKey(classNumber)) {
List<Student> list = m.get(classNumber);
list.add(s);
} else {
List<Student> list = new ArrayList<Student>();
list.add(s);
m.put(classNumber, list);
}
}
//遍历map集合 获得班级 和对应的学生集合
for (Entry<String, List<Student>> ent : m.entrySet()) {
List<Student> s = ent.getValue();
int total = 0;
//遍历学生集合得到每个学生的分数 求总和
for (int n = 0; n < s.size(); n++) {
total = total + s.get(n).getScore();
}
System.out.println(ent.getKey() + "班 总分:" + total + " 平均分:"
+ (float) total / s.size() + " 人数:" + s.size());
}
}
public static void main(String[] args) {
TestListMap tlm = new TestListMap();
List<Student> students = new ArrayList<Student>();
students.add(new Student("Liucy", "0701", 100));
students.add(new Student("Huxz", "0702", 150));
students.add(new Student("George", "0702", 142));
students.add(new Student("Wanglin", "0701", 80));
students.add(new Student("Wuwl", "0701", 91));
students.add(new Student("Wangr", "0702", 100));
tlm.count(students);
}
}
/**
* 学生类
* @author 小苗 */
class Student{
private String name;
private String classNumber;
private int score;
public Student(String name, String classNumber, int score) {
super();
this.name = name;
this.classNumber = classNumber;
this.score = score;
}
public String getClassNumber() {
return classNumber;
}
public void setClassNumber(String classNumber) {
this.classNumber = classNumber;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}