您的位置:首页 > 其它

面向对象的思维解决问题

2015-03-31 15:34 204 查看
创建一个Student 类 有属性  String name   姓名    String no 班号   double Score 成绩

现将若干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);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面向对象