面向对象的思维解决问题

创建一个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);
		}
		
	}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值