使用2个不同的HashMaps时,我可以使用第一个而不是第二个创建一个keySet

时间:2013-11-29 06:07:49

标签: java methods hashmap keyset

我在一个班级中使用了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;
}

4 个答案:

答案 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对象。这就是它抛出错误的原因。 请使用不同的名称或在顶部声明您的变量。