读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。
输入格式:
每个测试输入包含 1 个测试用例,格式为
第 1 行:正整数 n
第 2 行:第 1 个学生的姓名 学号 成绩
第 3 行:第 2 个学生的姓名 学号 成绩
… … …
第 n+1 行:第 n 个学生的姓名 学号 成绩
其中姓名和学号均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。
输出格式:
对每个测试用例输出 2 行,第 1 行是成绩最高学生的姓名和学号,第 2 行是成绩最低学生的姓名和学号,字符串间有 1 空格。
输入样例:
3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95
输出样例:
Mike CS991301
Joe Math990112
解析:一拿到题,我的思路就是字符串的截取,然后以姓名、学号、成绩为一对存储在map里,以成绩为键,姓名+“ ”+学号为值。最后根据map的键值大小进行输出最高和最低的值。大体的思路就是这些,上代码。
public class Pta_1004 {
public static void main(String[] args) {
String name;
String id;
int score;
Map map = new HashMap<Integer, String>();//存储之后的整条数据
Scanner scanner = new Scanner(System.in);
int time = Integer.parseInt(scanner.nextLine());
for (int i = 0; i < time; i++) {//将数据存入map中
String phane = scanner.nextLine();
// System.out.println(phane);
int name_len = phane.indexOf(" ");
name = phane.substring(0, name_len);
int id_len = phane.indexOf(" ", name_len + 1);
id = phane.substring(name_len + 1, id_len);
score = Integer.parseInt(phane.substring(id_len + 1));
//因为我们是以score为键,map的键是唯一的,所以score不会重复,我们只需要写以下的条件
//如果都满足 则添加至map里
if ( name.length() <= 10 && id.length() <= 10 && 0 <= score && score <= 100) {
map.put(score, name + " " + id);//按格式 需要一个空格
}
}
//获取键值
Set set = map.keySet();
int max_keyname = 0;//最大的键值
int min_keyname = 0;//最小的键值
max_keyname = Integer.parseInt(String.valueOf(Collections.max(set)));
min_keyname = Integer.parseInt(String.valueOf(Collections.min(set)));
// System.out.println(max_keyname);
// System.out.println(min_keyname);
//利用获取到的最大最小键值 获取value
String zuigao = String.valueOf(map.get(max_keyname));
System.out.println(zuigao);
String zuidi = (String) map.get(min_keyname);
System.out.println(zuidi);
}
}