如果要写程序表达一个班级的很多个学生的很多门课的成绩,应该如何表达这些数据?
如果我们希望通过学生的姓名,可以找到他的所有成绩,而每一门课的成绩,是由课程名称和分数构成的。
而如果我们还希望这个程序能找出某一门课的全部学生的成绩应该怎么做呢?
注意,并非所有的学生都参加了所有的课程。
import java.util.HashMap;
public class Scores {
private HashMap<String,HashMap<String,Double>> scores = new HashMap<String,HashMap<String,Double>>();
//录入分数
public void setScores(String name,String subName,double score){
if(scores.containsKey(name))
{
scores.get(name).put(subName, score);
}
else
{
HashMap<String,Double> temp = new HashMap<String,Double>();
temp.put(subName, score);
scores.put(name,temp);
}
}
//通过姓名查询该学生所有成绩
public void query(String name) {
for( String temp : scores.get(name).keySet() )//scores.get(name)获取了该学生的<课程,成绩> HashMap,再对该HashMap用keySet()返回所有的课程集合 ,用temp来遍历课程
{
System.out.println(temp+": "+scores.get(name).get(temp));
}
}
//通过课程查询所有选修该课的学生成绩
public void queryBySubject(String subName) {
//对每一个学生 遍历找到课程后输出成绩
for( String name : scores.keySet() )
{
for(String temp : scores.get(name).keySet())
{
if( temp == subName )
{
System.out.println(name+": "+scores.get(name).get(subName));
}
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scores scores = new Scores();
scores.setScores("张三", "Chinese", 100);
scores.setScores("张三", "Math", 100);
scores.setScores("李四", "Chinese", 95);
scores.setScores("李四", "Math", 95);
scores.query("张三");
System.out.println("-------------------------------");
scores.queryBySubject("Chinese");
}
}