面向对象分拣存储

Posted Jansens

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象分拣存储相关的知识,希望对你有一定的参考价值。

 题目:一个Student类,属性name姓名,no编号,score成绩,现在将若干个student对象放入List,请统计出每个班级的总分和平均分

/**
 * 学生类
 * @author student
 *
 */
public class Student {

    private String name;//姓名
    private String no;//编号
    private double score;//成绩
    public Student(String name, String no, double score) {
        super();
        this.name = name;
        this.no = no;
        this.score = score;
    }
    public Student() {
        super();
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getNo() {
        return no;
    }
    public void setNo(String no) {
        this.no = no;
    }
    public double getScore() {
        return score;
    }
    public void setScore(double score) {
        this.score = score;
    }
    
}
/**
 * 一个班级多个学生(学生列表)
 * @author classroom
 *
 */
public class ClassRoom {
    private String no;//班级编号
    private List<Student> stuList;//班级列表
    private double total;//总分
    public ClassRoom() {
        stuList=new ArrayList<Student>();
        
    }
    public ClassRoom(String no) {
        this();
        this.no=no;
        
    }
    public ClassRoom(String no, List<Student> stuList, double total) {
        super();
        this.no = no;
        this.stuList = stuList;
        this.total = total;
    }
    public String getNo() {
        return no;
    }
    public void setNo(String no) {
        this.no = no;
    }
    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;
    }
    

}
/**
 * 一个Student类,属性name姓名,no编号,score成绩,现在将若干个student对象放入List,请统计出每个班级的总分和平均分
 * 面向对象分拣存储
 * @author MapDemo
 *
 */
public class MapDemo {

    public static void main(String[] args) {
        //1.考试
        List<Student> stuList=exam();
        //2.分析成绩
        Map<String ,ClassRoom> map=count(stuList);
        //查看总分 平均分
        view(map);
    }
    /**
     * 查询每个班的总分和平均分 
     * 遍历map
     */
    public static void view( Map<String ,ClassRoom> map){
        Set<String> keys=map.keySet();
        //获取迭代器对象
        Iterator<String> keysIt=keys.iterator();
        //先判断
        while(keysIt.hasNext()){
            //在获取
            String no=keysIt.next();
            ClassRoom room=map.get(no);
            //查看总分 计算平均分
            double total=room.getTotal();
            double avg=total/room.getStuList().size();
            System.out.println(no+"总分:"+total+"平均分:"+avg);
        }
    }
    /**
     * 统计分析
     * 1、面向对象
     * 2、分拣存储
     */
    public static Map<String ,ClassRoom> count(List<Student> list){
        Map<String ,ClassRoom> map=new HashMap<String,ClassRoom>();
        //1.遍历List
        for (Student student : list) {
            //分拣查出是否存在该编号的班级
            String no=student.getNo();//班级编号
            double score=student.getScore();//学生成绩
            //如果不存在就创建班级
            ClassRoom room=map.get(no);
            if(null==room){
                room=new ClassRoom(no);
                map.put(no, room);
            }
            //存在放入学生
            room.getStuList().add(student);//放入学生
            room.setTotal(room.getTotal()+score);//计算总分
        }
        return map;
    }
    
    
    /**
     * 模拟考试,测试数据放到List中
     */
    public static List<Student> exam(){
        List<Student> list=new ArrayList<Student>();
        //存放学生的成绩
        list.add(new Student("张三","1班",90));
        list.add(new Student("李四","1班",80));
        list.add(new Student("王五","1班",60));
        list.add(new Student("赵六","2班",90));
        list.add(new Student("王大锤","2班",80));
        return list;
    }

}

 

以上是关于面向对象分拣存储的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段9——JS中的面向对象编程

面向对象-面向对象与面向过程优缺点

面向面试编程代码片段之GC

如何将 r ggplot 图存储为 html 代码片段

PHP面向对象之选择工厂和更新工厂

Java中面向对象的三大特性之封装