我在一个班级中使用了2个不同的HashMap
s,当我使用第一个(keySet()
方法)调用getExitString()
方法时,它工作正常,但是当我用第二个(getLockedDoors()
方法)调用它,我得到“找不到符号 - 方法keySet()
”错误。我怎样才能解决这个问题?谢谢!相关代码如下。
import java.util.HashMap;
import java.util.Set;
public class Room
{
private HashMap<String, Room> exits;
private HashMap<String, LockedDoor> lockedDoors;
public String getExitString() {
String exitReturn = "";
Set<String> exitSet = exits.keySet();
for (String eachExit : exitSet) {
exitReturn = exitReturn + eachExit + " ";
}
return exitReturn;
}
public String getLockedDoorString() {
String lockedDoors = "";
Set<String> doorSet = lockedDoors.keySet();
for (String door : doorSet) {
lockedDoors = lockedDoors + door + " ";
}
return lockedDoors;
}
答案 0 :(得分:4)
在失败的行中,lockdoors
解析为String而不是HashSet表达式。
这是因为局部变量 shadow 具有相同名称的成员变量。
String lockedDoors = ""; // shadowed here
Set<String> doorSet = lockedDoors.keySet(); // and String.keySet() is bogus
解决方案:您可以为本地变量(推荐,IMO)使用不同的名称,也可以使用this
关键字来引用实例级变量(经常要求的概念)。这是一个样本。
String lockedDoors = "";
Set<String> doorSet = this.lockedDoors.keySet();
答案 1 :(得分:1)
您的本地变量名称和HashMap的名称相同,因此给出了错误
答案 2 :(得分:0)
String lockedDoors = "";
lockedDoors是String对象,与HashMap lockedDoors同名。
String类没有方法keySet:)
答案 3 :(得分:0)
String lockedDoors = "";
Set<String> doorSet = lockedDoors.keySet();
您的代码的主要问题在于两行,因为“您已经将lockedDoors声明为hashmap对象,并且已在方法getLockedDoorString()中将lockedDoors声明为字符串对象”,在这种情况下,lockedDoors变量始终引用本地字符串lockedDoors对象。这就是它抛出错误的原因。 请使用不同的名称或在顶部声明您的变量。