天天看點

【集合類】關于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;
	}

	}