第三周讨论区_学生成绩的数据结构

题目:

如果要写程序表达一个班级的很多个学生的很多门课的成绩,应该如何表达这些数据?

如果我们希望通过学生的姓名,可以找到他的所有的成绩,而每一门课的成绩,是由课程名称和分数构成的。

而如果我们还希望这个程序能找出某一门课的全部学生的成绩应该怎样做呢?

注意,并非所有的学生都参加了所有的课程。

代码:

package test;

import java.util.HashMap;

public class Student_Grade
{
	private HashMap<String, HashMap<String, Double>> studentInfo = new HashMap<String, HashMap<String, Double>>();

	// 通过姓名添加成绩
	public void add(String name, String course, double grade)
	{
		if (studentInfo.containsKey(name))
		{
			studentInfo.get(name).put(course, grade);
		}
		else
		{
			HashMap<String, Double> temp = new HashMap<String, Double>();
			temp.put(course, grade);
			studentInfo.put(name, temp);
		}
	}

	// 通过姓名找到这名学生的所有成绩
	public String getScore_name(String name)
	{
		HashMap<String, Double> temp = new HashMap<String, Double>();
		for (String k : studentInfo.keySet())
		{
			if (k == name)
			{
				temp = studentInfo.get(name);
				break;
			}
		}
		return name+" "+temp.toString();
	}

	// 通过课程名找到这一门课的全部学生的成绩
	public String getScore_subject(String subject)
	{
		HashMap<String, Double> temp = new HashMap<String, Double>();
		for (String k : studentInfo.keySet())
		{
			if (studentInfo.get(k).containsKey(subject))
			{
				temp.put(k, studentInfo.get(k).get(subject));
			}
		}
		return subject+":"+temp.toString();
	}

	// 重载toString()方法
	public String toString()
	{
		String temp="";
		for(String k:studentInfo.keySet())
			temp+=(k+":"+studentInfo.get(k).toString()+"\n");
		return temp;
	}

	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		Student_Grade student = new Student_Grade();
		student.add("张三", "Java", 60.0);
		student.add("张三", "C++", 70.0);
		student.add("李四", "C++", 80.0);
		student.add("王五", "C++", 90.2);
		System.out.println(student.getScore_name("张三"));
		System.out.println(student.getScore_subject("C++"));
		System.out.println(student);
	}
}

运行结果:

总结:

起初,两个查询的方法如下所示,返回值是一个Hasmap<String,Doubole>。

后来在为Student_Grade写toString()方法以便输出所有学生的所有成绩时,想到可以在两个查询的方法中临时建立一个String,调用toString()方法,赋值给它,并对该字符串进行处理,返回一个字符串。使得输出有”姓名“和”课程名“,信息更完整。(强迫症)

	// 通过姓名找到这名学生的所有成绩
	public HashMap<String, Double> getScore_name(String name)
	{
		HashMap<String, Double> temp = new HashMap<String, Double>();
		for (String k : studentInfo.keySet())
		{
			if (k == name)
			{
				temp = studentInfo.get(name);
				break;
			}
		}
		return temp;
	}

	// 通过课程名找到这一门课的全部学生的成绩
	public HashMap<String, Double> getScore_subject(String subject)
	{
		HashMap<String, Double> temp = new HashMap<String, Double>();
		for (String k : studentInfo.keySet())
		{
			if (studentInfo.get(k).containsKey(subject))
			{
				temp.put(k, studentInfo.get(k).get(subject));
			}
		}
		return temp;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值