成绩查询系统
原创
©著作权归作者所有:来自51CTO博客作者wx59c7233716b35的原创作品,请联系作者获取转载授权,否则将追究法律责任
数学老师小y 想写一个成绩查询系统,包含如下指令:
insert [name] [score],向系统中插入一条信息,表示名字为name的学生的数学成绩为score。
find [name],表示查找名字为name的学生的数学成绩。
注意有些同学可能会为了刷分多次选课,查询的时候给出最大成绩即可。学生的名字是由小写字母组成。成绩是一个 0…1000 \ldots 1000…100 的整数。
老师找到你,想你帮他完成这个系统。
输入格式
输入若干行,每行都是insert [name] [score]或者find [name]的形式,或一行end表示输入结束。输入行数不大于 100010001000,每个学生名字长度不大于 202020 个字符。
输出格式
对于每个查询,输出查询的学生的最高成绩,如果系统中不存在该学生,输出 ?1-1?1。
样例输入
insert zhangsan 90
insert lisi 78
insert xiaoming 86
find xiaoming
find jack
end
样例输出
86
-1
这个题最好的方法应该就是用map的集合框架了。不过用普通的循环条件也是比较简单的。
方法一:map集合框架
static Scanner sc=new Scanner(System.in);
static int flag=0;
public static void main(String[] args){
Test08_2 test=new Test08_2();
while(true){
if(flag==1){
break;
}
test.start();
}
}
Map a=new LinkedHashMap<String,Integer>();
public void start(){
String string=sc.next();
if(string.equals("insert")){
String num1=sc.next();
int num2=sc.nextInt();
if(a.containsKey(num1)){
int a2=(int) a.get(num1);
num2=Math.max(a2, num2);
}
a.put(num1, num2);
}else{
if(string.equals("find")){
String a2=sc.next();
if(a.containsKey(a2)){
System.out.println(a.get(a2));
}else{
System.out.println(-1);
}
}else{
flag=1;
}
}
}
方法二:普通循环
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String[] i=new String[1000];
int[] i1=new int[1000];
int x=0;
while(true){
int max=0,flag=0;
String str1=sc.next();
if(str1.equals("insert")){
i[x]=sc.next();
i1[x]=sc.nextInt();
x++;
}
if(str1.equals("find")){
String str2=sc.next();
for(int y=0;y<1000;y++){
if(i[y]!=null&&i[y].equals(str2)){
if(i1[y]>max){
max=i1[y];
flag=1;
}
}
}
for(int y1=0;y1<1000;y1++){
if(flag==1){
System.out.println(max);
break;
}
else if(flag==0){
if(i[y1]==null){
System.out.println(-1);
break;
}
}
}
}
max=0; flag=0;
}
}