【发布时间】:2011-04-26 17:48:29
【问题描述】:
有人告诉我将所有内容都更改为 HashMap() 而不是 ArrayList(),并且在大多数情况下,一切都很完美。但是,我无法让这种方法正常工作。
我的 HashMap() 看起来像
私有 HashMap critMap = new HashMap();
我有房间类和生物类房间可以有生物。 Creatures 需要能够对我已经有方法的某些命令做出反应,并且只要这种方法是正确的,它们就应该可以工作。我不确定出了什么问题。
这是ArrayList()的方法
public void critReactRoomStateChange2(String command, PC pc, String name) {
Creature temp = null;
for (int i = 0; i < critArr.size(); i++) {
if (!(getCreatures().get(i) instanceof PC) && !(getCreatures().get(i).getName().equals(name))) {
temp = getCreatures().get(i);
if (temp != null) {
getCreatures().get(i).reactStateChange(command, pc);
temp.checkNewRoom();
if (!temp.equals(getCreatures().get(i))) {
i--;
}
}
}
}
}
这是我累了实现HashMap()之后的方法
public void critReactRoomStateChange(String command, PC pc, String name) {
Creature temp = null;
if (!(getCreatures().get(name) instanceof PC)) {
temp = getCreatures().get(name);
if (temp != null) {
getCreatures().get(name).reactStateChange(command, pc);
temp.checkNewRoom();
}
}
}
getCreatures().get(name) 将传递给它的字符串名称作为 hashMap 的键来查找它所指的实际对象。如上所述,我的 hashMap 因此生物名称是字符串(键),值 Creature(包含名称以外的其他信息)是值。当我调用 getCreature().get(name) 时,我正在寻找密钥字符串名称,我希望它返回对象 Creature。如果它在 hashMap 中找不到它应该返回 null ,除非我弄错了。
我可能只是错过了一些非常简单的东西。任何帮助将不胜感激。如果需要更多代码,我很乐意编辑并将其放入。
谢谢
编辑:生物类是抽象的,PC、动物、NPC 都对其进行了扩展。只是这样你就不会想知道随机的 PC 和 NPC 和动物在做什么。哈哈
Edit2:没有错误,除了我没有得到反应。它什么也不做,所以 critReactRoomStateChange 现在不起作用。生物没有被传递,因此其他方法可以对其进行操作。
所以第二个代码框不能正常工作。它本质上什么都不做。
【问题讨论】:
-
什么方法不能正常工作?你有什么错误吗?
-
与其添加代码,不如详细说明原始方法的意图是什么。为什么每一行都做它该做的事?
-
没有错误,除了我没有得到反应。它什么也不做,所以 critReactRoomStateChange 现在不起作用。生物不会被传递,因此其他方法可以对其进行操作。
-
我还想指出您在标题中选择的措辞相当糟糕。 “实现 HashMap”通常意味着您正在编写自己的 HashMap 版本,而您所做的更多的是“使用 ArrayList 重构类以使用 HashMap”。
-
好的,我很抱歉。给我一点时间,我会拿出代码并为我的问题添加更好的定义。