题干
数学老师小y 想写一个成绩查询系统,包含如下指令:
insert [name] [score],向系统中插入一条信息,表示名字为name的学生的数学成绩为score。
find [name],表示查找名字为name的学生的数学成绩。
注意有些同学可能会为了刷分多次选课,查询的时候给出最大成绩即可。学生的名字是由小写字母组成。成绩是一个 0 \ldots 1000…100 的整数。
老师找到你,想你帮他完成这个系统。
输入格式
输入若干行,每行都是insert [name] [score]或者find [name]的形式,或一行end表示输入结束。输入行数不大于 10001000,每个学生名字长度不大于 2020 个字符。
输出格式
对于每个查询,输出查询的学生的最高成绩,如果系统中不存在该学生,输出 -1−1。
-------------------------------------------------------成功解决下面bug-----------------------------------------------------------------------------------------
问题总结:
-
中间很多输出了内容没有删掉
-
你没有考虑一个情况是可能有人的名字是 insert
-
num 的 return 值显然存在问题
成功代码:
import java.util.HashMap;
import java.util.Scanner;
/**
-
@author 张泰
-
@Version v 1.0
-
@date 2019/12/13
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
HashMap<String, String> map = new HashMap<>();
while (sc.hasNext()) {
String s = sc.nextLine();
int show = show(map, s);
// System.out.println(show);
if (show == -1) {
return;
}
}
}
public static int show(HashMap<String, String> map, String s1) {
String[] s2 = s1.split(" ");
if (s2[0].equals("insert")) {
for (String s7 : map.keySet()) {
if (s7.equals(s2[1])) {
if (Integer.valueOf(map.get(s7)) < Integer.valueOf(s2[2])) {
map.put(s2[1], s2[2]);
}
return 1;
}
}
map.put(s2[1], s2[2]);
return 1;
}
if (s2[0].equals("find")) {
for (String s : map.keySet()) {
if (s2[1].equals(s)) {
System.out.println(map.get(s2[1]));
return 1;
}
}
System.out.println(-1);
return 1;
}
return -1;
}
}
---------------------------------------------------------bug---------------------------------------------------------------------------------------
测试数据
//没有问题
insert zhangsan 90
insert lisi 78
insert xiaoming 86
find xiaoming
find jack
end
//有问题
insert zhangsan 90
insert zhangsan 99
insert lisi 78
insert xiaoming 86
find xiaoming
find zhangsan
find luqiang
find songtianhao
end
//问题剖析
find方法本应该打印两次-1却打印一次-1,并且每次打印完能够查询到的名字都会打印一次-1
//题目源路径
https://nanti.jisuanke.com/t/A1140
//目前进展进度(直接导入java项目即可用)
import java.util.HashMap;
import java.util.Scanner;
/**
-
@author 张泰
-
@Version v 1.0
-
@date 2019/12/13
*/
public class demo01 {
//程序设计:成绩查询系统------------------有bug-------------------A1140-----------
public static void main(String[] args) {
int num=0;
Scanner sc = new Scanner(System.in);
HashMap<String, String> map = new HashMap<>();
while (sc.hasNext()) {
String s = sc.nextLine();
if (s.contains(“insert”)) {
//instert
insert(s,map);
}
//find
if (s.contains(“find”)) {
System.out.println(s);
find(s, map, num);
}
//end
if (s.equals(“end”)) {
return;
}
}
}
public static void insert(String s1,HashMap<String, String> map){
String[] insert_s = s1.split("insert ");
String[] s = insert_s[1].split(" ");
for (String s7 : map.keySet()) {
if (s7.equals(s[0])) {
if (Integer.valueOf(map.get(s7)) > Integer.valueOf(s[1])) {
map.put(s7, s[1]);
}
}
}
map.put(s[0], s[1]);
}
public static void find(String s1,HashMap<String, String> map,int num){
for (String s : map.keySet()) {
// System.out.println(s);
if (s1.contains(s)) {
System.out.println(map.get(s));
if (num == 0) {
continue;
} else {
System.out.println(num);
}
num= 0;
} else {
num = -1;
}
}
}
public static int show(String s1) {
return -1;
}
}