Java HashMap实现Worker数据插入查询 方法调用无响应问题求助
代码故障根因及修复方案
你的代码一共存在4处直接导致编译失败、运行逻辑错误、无输出的问题,逐一修复即可正常运行:
- Worker类构造方法名与类名不匹配:类名为
Worker,但构造方法错误命名为Flight,导致实例化Worker时找不到合法构造器,直接编译失败。
- Worker类构造方法名与类名不匹配:类名为
- WorkerDB类的
InsertWorkerData方法存在语法错误:创建Worker实例的代码缺失右括号,且缺少HashMap类的导包语句,无法通过编译。
- WorkerDB类的
searchWorker方法遍历逻辑有缺陷:循环边界设置为i < workers.size(),初始化HashMap后长度为3,循环只会遍历key为1、2的条目,key=3的员工数据永远不会被检索到;且遍历HashMap时通过连续整数key取值的写法未做非空判断,后续如果删除条目导致key不连续会触发空指针异常。
- 测试类未输出方法返回结果:调用
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
相关产品推荐
相关产品推荐

