建立一個學生類,每個學生有一個姓名屬性、班級名稱屬性(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;
}
}