一开始是老师在MOOC上面发起了一个评论,然后大家需要回复(并附上自己的代码),自己在这里想了很多,就写写博客记录一下了。
自己刚学习Java半学期,还是个小白,写写博客记录自己的学习历程吧= =
第一次想的是这样来实现
HashMap<String, HashMap> mapSystem = new HashMap<String, HashMap>();
HashMap<String, Double> mapScores = new HashMap<String, Double>();
然后自己后面实现的时候发现还是有很多不成熟的地方的,最终越写越乱,还是没有实现。
这次又换了一个思路,通过放个数组进去,来实现。
package java;
import java.util.HashMap;
import java.util.Scanner;
public class Test {
public static void main(String args[]) {
HashMap<String, Object[]> mapScores = new HashMap<String, Object[]>();
Scanner in = new Scanner(System.in);
String name = in.next(); //输入姓名
Object[] scores = new Object[2];
scores[0] = in.next(); //输入学科(scores[0]存放String类型的学科)
scores[1] = in.nextDouble(); //输入学科相对应的分数(scores[1]存放double类型的分数)
mapScores.put(name, scores);
for(String a : mapScores.keySet()) {
System.out.println("Key\tProject\tScore");
System.out.println(a+"\t"+mapScores.get(a)[0]+"\t"+mapScores.get(a)[1]);
}
}
}
一开始放的是String[],然后因为上次听了软件工程方面的讲座,为了以后如果要实现的成绩排序,改成了Object[],然后长度为2的数组,第一个位置填学科,第二个位置填学科的成绩。
这样大致实现了一小部分的功能。。。。但还不是很满意= =
这还算不上一个系统吧(自己对系统的概念挺模糊的。。感觉这个不算),然后看了其他同学的评论,灵感又来了。
这次还是大致和第一次构思一样,然后相当于进化了一下 >▽<
HashMap<String, HashMap<String, Double>> mapSystem = new HashMap<String, <String, Double>>();
用这个构思,自己写了一个完整的一个系统出来
import java.util.HashMap;
import java.util.Scanner;
public class Test {
Scanner in = new Scanner(System.in);
HashMap<String, HashMap<String, Double>> mapSystem = new HashMap<String, HashMap<String, Double>>();
void begin() {
System.out.println("------------开始界面------------");
System.out.println("\t输入1:录入信息");
System.out.println("\t输入2:姓名查找信息");
System.out.println("\t输入3:学科查找信息");
System.out.println("\t输入0:退出系统");
System.out.println("-----------------------------");
}
void choice(int number) {
switch(number) {
case 0:
System.exit(0);
case 1:
System.out.println("依次输入姓名、学科、成绩(用空格分开):");
this.informationInput(in.next(), in.next(), in.nextDouble());
break;
case 2:
System.out.println("请输出检索的姓名:");
this.informationFindByName(in.next());
break;
case 3:
System.out.println("请输出检索的学科:");
this.informationFindByProject(in.next());
break;
default:
System.out.println("请输入正确序号!");
break;
}
}
void informationInput(String name, String project, double score) {
HashMap<String, Double> map = new HashMap<String, Double>();
map.put(project, score);
mapSystem.put(name, map);
System.out.println("信息添加成功!");
System.out.println("信息如下:");
System.out.println("Name\tProject=Score");
System.out.println(name+"\t"+mapSystem.get(name));
}
void informationFindByName(String name) {
for(String s : mapSystem.keySet()) {
if(s.equals(name)) {
System.out.println("查找结果如下:");
System.out.println("Project\tScore");
for(String p :mapSystem.get(s).keySet()) {
System.out.println(p+"\t"+mapSystem.get(s).get(p));
}
}
else System.out.println("NOT FOUND!");
}
}
void informationFindByProject(String project) {
for(String s : mapSystem.keySet()) {
for(String p : mapSystem.get(s).keySet()) {
if(p.equals(project)) {
System.out.println("查找结果如下:");
System.out.println("Name\tScore");
System.out.println(s+"\t"+mapSystem.get(s).get(p));
}
else System.out.println("NOT FOUND!");
}
}
}
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
Test test = new Test();
while(true) {
test.begin();
test.choice(sc.nextInt());
}
}
}
运行是没有问题的,自己也测试了很多遍,还是可以简单使用的(数据库自己不会用。。寒假学好了再完善下),下面就是测试的一个例子。
自己除了这些构思还想了其他的一些想法,比如说构建一个二维数组每个位子存放三个数(姓名,学科,成绩),估计也可以实现
一个学生会有很多门课,绝对不止一门,而再用put方法录入键值对的话不会在后面append上,而是把之前的信息覆盖了。
录入的信息会覆盖之前的信息,这也是HashMap的一个特点啦。
一开始想的方案是换个次序,按照学科、姓名、成绩,这样就能一个人对应多个学科了,但是一个学科也能对应多个学生,这又是个问题。
那可能还是用数组参数?或者再定义一个HashMap,输入信息那块加点东西,传递给两个HashMap相应的值?再或者重头来,定义个二维数组来搞= =?
因为自己大二的课程太满了,临近期末考试,自己没啥时间思考这些问题了,就到此为止啦,欢迎大家讨论解决方法,交流一些思想。