首页 > 技术文章 > 统计出每个班级的总分和平均分

fancyzhen 2014-09-29 00:56 原文

 1 package collection.map;
 2 
 3 
 4 public class Student {
 5     private String name;
 6     private String classNo;
 7     private double score;
 8     
 9     
10     public Student(String name, String classNo, double score) {
11         super();
12         this.name = name;
13         this.classNo = classNo;
14         this.score = score;
15     }
16     public String getName() {
17         return name;
18     }
19     public void setName(String name) {
20         this.name = name;
21     }
22     public String getClassNo() {
23         return classNo;
24     }
25     public void setClassNo(String classNo) {
26         this.classNo = classNo;
27     }
28     public double getScore() {
29         return score;
30     }
31     public void setScore(double score) {
32         this.score = score;
33     }
34     
35     
36 }

 

package collection.map;

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



public class ClassRoom {

	private String roomNo;
	private List<Student> stus;		//学生列表
	private double total;			//总分
	
	public ClassRoom()
	{
		stus = new ArrayList<Student>();
	}
	
	public ClassRoom(String roomNo)
	{
		this();
		this.roomNo = roomNo;
	}

	public String getRoomNo() {
		return roomNo;
	}

	public void setRoomNo(String roomNo) {
		this.roomNo = roomNo;
	}

	public List<Student> getStus() {
		return stus;
	}

	public void setStus(List<Student> stus) {
		this.stus = stus;
	}

	public double getTotal() {
		return total;
	}

	public void setTotal(double total) {
		this.total = total;
	}
	
	
}

  

 1 package collection.map;
 2 
 3 import java.util.ArrayList;
 4 import java.util.HashMap;
 5 import java.util.Iterator;
 6 import java.util.List;
 7 import java.util.Map;
 8 import java.util.Set;
 9 
10 
11 /*
12  *  定义一个Student类,属性:name 姓名,classNumber 班号,score 成绩
13  *  现在将若干Student对象放入List,请统计出每个班级的总分和平均分,分别打印出来
14  *    以面向对象的思维解决
15  * 
16  */
17 public class MapDemo02 {
18 
19     //将若干Student放入List
20     public static void exam(List<Student> list)
21     {
22         list.add(new Student("AAA", "301", 88));
23         list.add(new Student("BBB", "301", 84));
24         list.add(new Student("CCC", "302", 85));
25         list.add(new Student("DDD", "302", 86));
26         list.add(new Student("EEE", "201", 46));
27         list.add(new Student("FFF", "201", 68));
28         list.add(new Student("AAA", "301", 88));
29     }
30     
31     //统计分数
32     public static void count(Map<String, ClassRoom> rooms,List<Student> list)
33     {
34         for(Student stu:list)
35         {
36             String no = stu.getClassNo();
37             double score = stu.getScore();
38             //根据班级编号 查看 Map是否存在该班级  分拣思路
39             ClassRoom room = rooms.get(no);
40             if(null == room)
41             {
42                 room = new ClassRoom(no);
43                 rooms.put(no, room);
44             }
45             //存储总分
46             room.setTotal(room.getTotal() + score);
47             room.getStus().add(stu);
48         }
49     }
50     
51     //打印 总分与平均分
52     public static void printScoreAndAvg(Map<String, ClassRoom> rooms)
53     {
54         Set<Map.Entry<String, ClassRoom>> entrySet = rooms.entrySet();
55         Iterator<Map.Entry<String, ClassRoom>> iter = entrySet.iterator();
56         while (iter.hasNext()) {
57             Map.Entry<String, ClassRoom> entry = iter.next();
58             ClassRoom room = entry.getValue();
59             double avg = Math.round(room.getTotal() / room.getStus().size());
60             System.out.println("班号:"+room.getRoomNo()+",总分:"+room.getTotal()+"平均分:"+avg);
61         }
62     }
63     
64     public static void main(String[] args) {
65         List<Student> list = new ArrayList<Student>();
66         exam(list);
67         
68         //统计
69         Map<String, ClassRoom> rooms = new HashMap<String, ClassRoom>();
70         count(rooms, list);
71         printScoreAndAvg(rooms);
72         
73     }
74 }

 

推荐阅读