`
miaoge
  • 浏览: 107552 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类

【集合类】关于List与Map集合的第二题(有一个存放学生类的集合list,打印出每个班级的总分和平均分如题:)

 
阅读更多

建立一个学生类,每个学生有一个姓名属性、班级名称属性(String)和考试成绩

属性(int),实例化10个对象先存放到一个list中,要求有三个不同的班级;某次

考试结束后,每个学生都获得了一个考试成绩。请打印出每个班级的总分和平均分

以及人数。
将学生的班级信息提取出来,然后按班级与学生键值配对存放到map中,跟第1题的形式一样,最后统计每个班级对应的学生集合中的每个学生的分数。

 

该题误点:

    这题很多人有一个误点就是if(list.get(i).Class == "一班") 直接这样来判断某个学生的班级信息是否属于“一班”,这样肯定是不行的,你想想学生信息是通过构造器传参进来的,我们怎么知道他是属于哪个班?怎么得到有"一班"的?

 所以这里应该用if (m.containsKey(classNumber))  语句来判断Map中是否包含这个班级的键,若包含就通过m.get(classNumber)方法获得对应的学生信息集合,然后把该学生添加到这个集合中;若不包含就添加一个该班级与一个存放该班级学生信息的list集合的键值进去。

 

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

/**
 * @author 小苗
 *某中学有若干学生(学生对象放在一个List中),每个学生有一个姓名属性、班级名称
    属性(String)和考试成绩属性(int),某次考试结束后,每个学生都获得了一个考试成绩。
    请打印出每个班级的总分和平均分。
 */
public class TestListMap {
	
	public void count(List<Student> students){
		Map<String, List<Student>> m = new HashMap<String, List<Student>>();
		//得到list中的学生的班级信息,按不同的班级添加到Map中
		for (int i = 0; i < students.size(); i++) {
			Student s = (Student) students.get(i);
			String classNumber = s.getClassNumber();
			//如果班级存在就将学生添加到该班级对应的学生集合中
			if (m.containsKey(classNumber)) {
				List<Student> list = m.get(classNumber);
				list.add(s);

			} else {
				List<Student> list = new ArrayList<Student>();
				list.add(s);
				m.put(classNumber, list);
			}
		}
		//遍历map集合 获得班级 和对应的学生集合
		for (Entry<String, List<Student>> ent : m.entrySet()) {
			List<Student> s = ent.getValue();
			int total = 0;
          //遍历学生集合得到每个学生的分数 求总和
			for (int n = 0; n < s.size(); n++) {
				total = total + s.get(n).getScore();
			}
			System.out.println(ent.getKey() + "班 总分:" + total + " 平均分:"
					+ (float) total / s.size() + " 人数:" + s.size());
		}
	}

	public static void main(String[] args) {
		TestListMap tlm = new TestListMap();
		List<Student> students = new ArrayList<Student>();
		students.add(new Student("Liucy", "0701", 100));
		students.add(new Student("Huxz", "0702", 150));
		students.add(new Student("George", "0702", 142));
		students.add(new Student("Wanglin", "0701", 80));
		students.add(new Student("Wuwl", "0701", 91));
		students.add(new Student("Wangr", "0702", 100));
        tlm.count(students);
		
	}
}


	/**
	 * 学生类
	 * @author 小苗	 */
	class Student{
	private String name;
	private String classNumber;
	private int score;
	public Student(String name, String classNumber, int score) {
	   super();
	   this.name = name;
	   this.classNumber = classNumber;
	   this.score = score;
	}

	public String getClassNumber() {
	   return classNumber;
	}
	public void setClassNumber(String classNumber) {
	   this.classNumber = classNumber;
	}
	public String getName() {
	   return name;
	}
	public void setName(String name) {
	   this.name = name;
	}
	public int getScore() {
	   return score;
	}
	public void setScore(int score) {
	   this.score = score;
	}

	}

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics