java系统增加查找算法详解

题干
数学老师小y 想写一个成绩查询系统,包含如下指令:

insert [name] [score],向系统中插入一条信息,表示名字为name的学生的数学成绩为score。
find [name],表示查找名字为name的学生的数学成绩。
注意有些同学可能会为了刷分多次选课,查询的时候给出最大成绩即可。学生的名字是由小写字母组成。成绩是一个 0 \ldots 1000…100 的整数。

老师找到你,想你帮他完成这个系统。

输入格式
输入若干行,每行都是insert [name] [score]或者find [name]的形式,或一行end表示输入结束。输入行数不大于 10001000,每个学生名字长度不大于 2020 个字符。

输出格式
对于每个查询,输出查询的学生的最高成绩,如果系统中不存在该学生,输出 -1−1。
-------------------------------------------------------成功解决下面bug-----------------------------------------------------------------------------------------
问题总结:

  1. 中间很多输出了内容没有删掉

  2. 你没有考虑一个情况是可能有人的名字是 insert

  3. 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;
}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值