任务:求每个班的学生总成绩和平均成绩
利用面向对象+分解存储
Student类javabean类
public class Student {
//属性
private String name;//学生姓名
private int score;//学生成绩
private String classno;//学生所在班级编号
//构造方法集settergetter方法
}
ClassRoom类javabean类
public class ClassRoom {
//属性
private String classno;//班级编号private int total;//班级总分
private List<Student> stulist;//学生列表,一个班级含有多个学生
public ClassRoom(){
stulist=new ArrayList<Student>();//空构造器加入学生列表的初始化,防止空指针异常
}
public ClassRoom(String no){
this();
this.classno=no;
}
//构造方法集settergetter方法
分解存储
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Mapdemo {
public static void main(String args[]){
List list=exam();
Map ds=count(list);
view(ds);
}
/**利用迭代器打印成绩/
public static void view(Map<String,ClassRoom> map){Set<String> set=map.keySet();
Iterator <String>it=set.iterator();
while(it.hasNext()){
String classno=it.next();
int total=map.get(classno).getTotal();
ClassRoom classroom=map.get(classno);
int meanscore=total/classroom.getStulist().size();
System.out.println(classno+"的总分是"+total+",平均分是"+meanscore);
}
}
/**利用map分解存储/
Map<String,ClassRoom> map=new HashMap();
for(Student stu:list){
String classno=stu.getClassno();//学生的班级编号
int stuscore=stu.getScore();//学生的成绩
ClassRoom classroom=map.get(classno);
if(classroom==null){//若map中没有该key,创建一个袋子进行存储
classroom=new ClassRoom(classno);//ClassRoom中加入一个带参数构造器
classroom.setTotal(stuscore);
map.put(classno, classroom);
}
classroom.getStulist().add(stu);//map中已经包含这个key,对value进行操作,改变这个key对应的ClassRoom的总成绩属性值
classroom.setTotal(stuscore+classroom.getTotal());//System.out.println(classroom.getTotal()+"if");
map.put(classno, classroom);
}
return map;
}
/**
* 模拟考试
* @return
*/
public static List<Student>exam(){
List <Student> list=new ArrayList<Student>();
list.add(new Student("小王","一班",89));
list.add(new Student("小离","一班",82));
list.add(new Student("小花","一班",90));
list.add(new Student("小明","二班",56));
list.add(new Student("小翠","二班",98));
return list;
}
}