You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java HashMap实现Worker数据插入查询 方法调用无响应问题求助

代码故障根因及修复方案

你的代码一共存在4处直接导致编译失败、运行逻辑错误、无输出的问题,逐一修复即可正常运行:

    1. Worker类构造方法名与类名不匹配:类名为Worker,但构造方法错误命名为Flight,导致实例化Worker时找不到合法构造器,直接编译失败。
    1. WorkerDB类的InsertWorkerData方法存在语法错误:创建Worker实例的代码缺失右括号,且缺少HashMap类的导包语句,无法通过编译。
    1. searchWorker方法遍历逻辑有缺陷:循环边界设置为i < workers.size(),初始化HashMap后长度为3,循环只会遍历key为1、2的条目,key=3的员工数据永远不会被检索到;且遍历HashMap时通过连续整数key取值的写法未做非空判断,后续如果删除条目导致key不连续会触发空指针异常。
    1. 测试类未输出方法返回结果:调用searchWorker后没有打印返回值,即便方法执行成功控制台也不会显示任何内容,这是你看到“无任何预期响应”的直接原因。

修复后完整代码

Worker类

public class Worker {

    private String id;
    private String name;
    private String location;

    // 修复:构造方法名和类名保持一致
    public Worker(String id, String name, String location) {
        this.id = id;
        this.name = name;
        this.location = location;
    }

    public String getID() {
        return id;
    }

    public void setID(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }
}

WorkerDB类

// 修复:补全HashMap导包语句
import java.util.HashMap;

public class WorkerDB {

    HashMap<Integer, Worker> workers = new HashMap<Integer, Worker>();

    public WorkerDB() {
        workers.put(1, new Worker("W01", "John", "Workshop"));
        workers.put(2, new Worker("W02", "Steve", "Office"));
        workers.put(3, new Worker("W03", "Bob", "Gate"));
    }

    public String InsertWorkerData(String [] workerDataArray) {
        int sizeOfHashMap = Integer.parseInt(workerDataArray[0]);
        // 修复:补全新建Worker实例缺失的右括号
        workers.put(sizeOfHashMap, new Worker(workerDataArray[1], workerDataArray[2], workerDataArray[3]));
        return "Worker data inserted successfully";     
    }

    public String searchWorker(String workerID) {
        String search = "Worker with ID: " + workerID + ", not found";
        // 修复:修正循环边界为<=,增加非空判断,找到匹配项后直接终止循环提升效率
        for (int i = 1; i <= workers.size(); i++) {
            Worker currentWorker = workers.get(i);
            if(currentWorker != null && currentWorker.getID().equals(workerID)) {
                search = currentWorker.getID() + " " + currentWorker.getName() + " " + currentWorker.getLocation();
                break;
            }
        }
        return search;
    }
}

Interface测试类

public class Interface {

    public static void main(String[] args) {
        
        WorkerDB workers = new WorkerDB(); 
        String[] testArray = {"4", "W04", "George", "Garage"};
        // 测试插入新员工时可取消下方两行注释
        // String insertResult = workers.InsertWorkerData(testArray);
        // System.out.println(insertResult);
        // 修复:打印searchWorker的返回结果,控制台才会显示输出
        String searchResult = workers.searchWorker("W01");
        System.out.println(searchResult);    
    }
}

运行效果

修复后执行main方法,控制台会正常输出查询结果:

W01 John Workshop

如果取消插入新员工的注释,再查询W04也可以正常返回对应员工信息。

优化建议:如果后续需要频繁根据员工ID查询,更合理的设计是直接把员工字符串ID(比如W01)作为HashMap的key,省去遍历所有条目的步骤,查询效率更高,也不会出现整数key不连续导致的空指针问题。

内容的提问来源于stack exchange,提问作者plmeqruqwucfiaboop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.12 16:15:50