数学老师小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;
}
}