PTA 乙级 1004 成绩排名 (20分)

 写的很冗余,也没考虑类之间的关系,还能更简洁,更高效,仅做参考

有时间考虑做一个学生数据库

 1 import java.util.Arrays;
 2 import java.util.HashMap;
 3 import java.util.Scanner;
 4 
 5 public class Main {
 6     private HashMap<String,HashMap<String,Integer>> Grade =
 7             new HashMap<String, HashMap<String, Integer>>();
 8 
 9     public void SetGrade(String name,String ID,int grade){      //得到成绩
10         HashMap<String,Integer> stu = new HashMap<String, Integer>();
11         stu.put(ID,grade);
12         Grade.put(name,stu);
13     }
14 
15     public void getextre(boolean est){        //获得最高分、最低分(true是最高分,false 是最低分)
16         String str = null,name = null;
17         boolean flag = true;
18         for(String s : Grade.keySet()){
19             for(String k : Grade.get(s).keySet()){
20                 if(flag){name = s;str = k; flag = false;}
21                 if(est) {
22                     if (Grade.get(s).get(k) > Grade.get(name).get(str)) {
23                         name = s;
24                         str = k;
25                     }
26                 }else{
27                     if (Grade.get(s).get(k) < Grade.get(name).get(str)) {
28                         name = s;
29                         str = k;
30                     }
31                 }
32             }
33         }
34         System.out.println(name+" "+str);
35     }
36 
37     public static void main(String[] args) {
38         Main gad = new Main();
39         Scanner in = new Scanner(System.in);
40         int num = in.nextInt();
41         for(int i = 0; i<num; i++){
42             String name = in.next();
43             String sub = in.next();
44             int n = in.nextInt();
45             gad.SetGrade(name,sub,n);
46         }
47         gad.getextre(true);
48         gad.getextre(false);
49         in.close();
50     }
51 }

利用HashMap实现的

main函数里获取名字、ID、成绩那部分考虑过用字符串获取后,用split 函数分割,但是成绩从 String 转 int 的时候会报错,尝试过Integer.valueOf()和Interger.parseInt(String),还是报错,无法解决,只好定义变量去处理

猜你喜欢

转载自www.cnblogs.com/SCP-514/p/13190955.html