面向对象的思维解决问题
2015-03-31 15:34
204 查看
创建一个Student 类 有属性 String name 姓名 String no 班号 double Score 成绩
现将若干Student对象放入List,请统计出每个班级的总和和平均分,分别打印出来
首先分解问题 一步一步来 第一我们创建一个Student类 如下
第三步 统计出每个班级的总和和平均分
思路———我们装在list内的student元素都是没有分类的,想统计出每个班级的总分就得把相同班号的student分到同一个班级。考虑一个问题,刚开始分的时候肯定是一个班级也没有的所以需要创建一个新的班级,此后再进来的student 如果这个班级已有就添加进去。算总分无非就是每添加一个stu就把stu.getScoore();添加进去就行(注意:在每次添加之前需要先获取当前班级的总分)。这样的话就一个Student类是太好弄的,我们这样通过面向对象的思维来解决这个问题,我们再创建一个类Classroom包含属性 String no 班号 List<Student>
stus 班级的学生集合 double tatol 总分。
Map<String,Classroom> rooms = new HashMap<String, Classroom>();
现将若干Student对象放入List,请统计出每个班级的总和和平均分,分别打印出来
首先分解问题 一步一步来 第一我们创建一个Student类 如下
/** * 属性 name no score */ public class Student { private String name; private String no; private double score; public Student() { } public Student(String name, String no, double score) { super(); this.name = name; this.no = no; this.score = score; } 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; } }第二步 现将若干Student对象放入List
List<Student> list = ArrayList<Student>(); public static void exam(List<Student> list){ list.add(new Student("张三", "01", 91)); list.add(new Student("李四", "02", 92)); list.add(new Student("77521", "03", 93)); list.add(new Student("wangwu", "02", 94)); list.add(new Student("wudi", "03", 95)); list.add(new Student("007", "02", 96)); list.add(new Student("9527", "01", 97)); }
第三步 统计出每个班级的总和和平均分
思路———我们装在list内的student元素都是没有分类的,想统计出每个班级的总分就得把相同班号的student分到同一个班级。考虑一个问题,刚开始分的时候肯定是一个班级也没有的所以需要创建一个新的班级,此后再进来的student 如果这个班级已有就添加进去。算总分无非就是每添加一个stu就把stu.getScoore();添加进去就行(注意:在每次添加之前需要先获取当前班级的总分)。这样的话就一个Student类是太好弄的,我们这样通过面向对象的思维来解决这个问题,我们再创建一个类Classroom包含属性 String no 班号 List<Student>
stus 班级的学生集合 double tatol 总分。
public class Classroom { private String no; private List<Student> stus; private double tatol; public Classroom() { stus = new ArrayList<Student>(); } public Classroom(String no) { this(); this.no = no; } public String getNo() { return no; } public void setNo(String no) { this.no = no; } public List<Student> getStus() { return stus; } public void setStus(List<Student> stus) { this.stus = stus; } public double getTatol() { return tatol; } public void setTatol(double tatol) { this.tatol = tatol; } }这样问题就很好解决了:
Map<String,Classroom> rooms = new HashMap<String, Classroom>();
/** * 分拣法 分出班级 */ public static void count(Map<String,Classroom> rooms, List<Student> list){ for(Student stu : list){ String no = stu.getNo(); double score = stu.getScore(); Classroom room = rooms.get(no); if(null==room){ room = new Classroom(no); rooms.put(no, room); } room.setTatol(room.getTatol()+score); room.getStus().add(stu); } }接下来打印就好了:
public static void print(Map<String,Classroom> rooms){ Set<Map.Entry<String,Classroom>> entrySet = rooms.entrySet(); Iterator<Map.Entry<String,Classroom>> it = entrySet.iterator(); while(it.hasNext()){ Entry<String, Classroom> map = it.next(); Classroom room = map.getValue(); double avg = room.getTatol()/room.getStus().size(); System.out.println("班级为"+room.getNo()+"总分为"+room.getTatol()+"平均分为:"+avg); } }
相关文章推荐
- 解决问题的思维习惯
- 读大前研一《思考的技术》-锻炼解决问题的思维 推荐
- 一些解决问题的思维
- 用面向对象的思维去解决数三退一。关键字,双向环形链表。
- 帮舍友解决的电脑问题(由基础看思维)
- 用面向对象的思想简化MIS系统中的查询代码(三)——问题的解决
- 改变解决问题的思维(1)
- 用面向对象的想法解决费波那奇数列的兔子问题
- 3.如何用面向对象的思维考虑问题
- 思维的基本过程与解决问题
- 面向对象的精髓在于考虑问题的思路是从现实世界的人类思维习惯出发
- 为WebApi项目添加注册功能:问题与解决的思维流程
- 面向对象--多继承&派生类对象内存布局分析&各基类指针所指向的位置分析(解决面试宝典第四版P147问题)
- 面向对象思想解决的问题以及面向对象的三个特征
- 面向对象三大特征和解决的问题
- 用面向对象的思想解决问题:
- 【程序员的思维修炼】程序设计就是解决问题
- 程序员的基础和解决问题的思维很重要
- matlab中运用项目思维分析问题并解决问题
- 程序员的基础和解决问题的思维