121_容器_HashMap_经典存储_经典分拣思路_与面向对象组合解题

思考: 定义一个Student类
属性有姓名,班号,成绩;现在将若干Student对象放入List,请统计出每个班级的总分和平均分;
方案: 面向对象+分拣存储(1:N)

这里写图片描述

  • 学生类-Student
package hashmap.sortout.classscore;

public class Student {
    /**学生类*/ 
    private String name;//姓名
    private String classNo;//班级编号
    private double score;//成绩
    public Student() {
    }
    public Student(String name, String classNo, double score) {
        super();
        this.name = name;
        this.classNo = classNo;
        this.score = score;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getClassNo() {
        return classNo;
    }
    public void setClassNo(String classNo) {
        this.classNo = classNo;
    }
    public double getScore() {
        return score;
    }
    public void setScore(double score) {
        this.score = score;
    }
}
  • 班级类-Class
package hashmap.sortout.classscore;

import java.util.ArrayList;
import java.util.List;

public class Class {
    private String classNo;//班级编号
    private List<Student> stuList;//学生列表
    private double total; //总分
    public Class() {
        stuList=new ArrayList<Student>();
    }
    public Class(String classNo) {
        this();
        this.classNo =classNo;
    }
    public Class(String classNo, List<Student> stuList, double total) {
        super();
        this.classNo = classNo;
        this.stuList = stuList;
        this.total = total;
    }

    public String getClassNo() {
        return classNo;
    }
    public void setClassNo(String classNo) {
        this.classNo = classNo;
    }

    public List<Student> getStuList() {
        return stuList;
    }
    public void setStuList(List<Student> stuList) {
        this.stuList = stuList;
    }

    public double getTotal() {
        return total;
    }
    public void setTotal(double total) {
        this.total = total;
    }
}
  • 实现类-ClassScoreImpl
package hashmap.sortout.classscore;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 *思考: 定义一个Student类,
     属性:姓名,班号,成绩   现在将若干Student对象放入List,请统计出每个班级的总分和平均分
     方案: 面向对象+分拣存储(1:N)
 */

public class ClassScoreImpl {
    public static void main(String[] args) {
        //1、考试
        List<Student> stuList =exam();
        //2、分析成绩
        Map<String,Class> map =count(stuList);
        //3、查看成绩(总分 平均分)
        view(map);
    }

    /**
     * 1.模拟考试,将测试数据存到List中
     * @return
     */
    public static List<Student> exam(){
         List<Student> list =new ArrayList<Student>();
         //存放学生成绩
         list.add(new Student("老裴","a",85));
         list.add(new Student("裴兜兜","a",86));
         list.add(new Student("裴裴","a",89));
         list.add(new Student("高小三","b",80));
         list.add(new Student("高高","b",80));
         return list;
    }

    /**
     * 2.统计分析成绩
     * 2.1 面向对象
     * 2.2 分拣存储
     */
    public static Map<String,Class> count(List<Student> list){
        Map<String,Class> map =new HashMap<String,Class>();
        //1、遍历List
        for(Student stu:list){
            String classNo =stu.getClassNo(); //班级编号
            double score =stu.getScore(); //学号
            //2、分拣查看是否存在该 编号的班级             
            //如果不存在,创建班级
            Class newclass =map.get(classNo);
            if(null==newclass){
                newclass=new Class(classNo);
                map.put(classNo, newclass);
            }
            //放入学生
            newclass.getStuList().add(stu) ;//放入学生
            newclass.setTotal(newclass.getTotal()+score); //计算总分
        }
        return map;
    }

    /**
     * 3.查看每个班的总分和平均分  -->遍历 map
     */
    public static void view(Map<String,Class> map){
        Set<String> keyset =map.keySet();
        //获取迭代器对象
        Iterator<String> keyIterator =keyset.iterator();
        //先判断
        while(keyIterator.hasNext()){
            //再获取
            String key =keyIterator.next();
            Class _class =map.get(key);
            //查看总分  计算平均分
            double total =_class.getTotal();
            double avg =total/(_class.getStuList().size());
            System.out.println(key+"-->"+total+"-->"+avg);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值