0

HashMap在一个类中使用 2 个不同的 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

4 回答 4

4

在失败的行中,lockdoors解析为 String 而不是 HashSet 表达式。

这是因为局部变量会隐藏同名的成员变量。

String lockedDoors = "";                     // shadowed here
Set<String> doorSet = lockedDoors.keySet();  // and String.keySet() is bogus

解决方案:您可以为局部变量使用不同的名称(推荐,IMO)或使用this关键字来引用实例级变量(经常需要的概念)。这是一个示例。

String lockedDoors = "";
Set<String> doorSet = this.lockedDoors.keySet();
于 2013-11-29T06:11:26.140 回答
1

您的局部变量名称和 HashMap 的名称相同,因此会出错

于 2013-11-29T06:12:19.070 回答
0
String lockedDoors = "";
Set<String> doorSet = lockedDoors.keySet();

您的代码的主要问题是以上两行,因为“您已经将lockedDoors 声明为hashmap 对象,并且您已在getLockedDoorString() 方法中将lockedDoors 声明为字符串对象”,在这种情况下,lockedDoors 变量始终引用本地字符串lockedDoors 对象。这就是它抛出错误的原因。请使用不同的名称或在顶部声明您的变量。

于 2013-11-29T06:55:07.127 回答
0
String lockedDoors = "";

lockedDoors 是 String 对象,它与 HashMap 的lockedDoors 同名。

并且 String 类没有方法 keySet :)

于 2013-11-29T06:13:13.510 回答