0

HashMapクラスで2 つの異なる を使用していますkeySet()。最初のメソッド (getExitString()メソッド) でメソッドを呼び出すと正常に動作しますが、2 番目のメソッド (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は、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 = "";

lockedDoors は HashMap lockedDoors と同じ名前の String オブジェクトです。

そして String クラスにはメソッド keySet がありません:)

于 2013-11-29T06:13:13.510 に答える
0
String lockedDoors = "";
Set<String> doorSet = lockedDoors.keySet();

コードの主な問題は、「すでに lockedDoors をハッシュマップ オブジェクトとして宣言しており、lockedDoors をメソッド getLockedDoorString() で文字列オブジェクトとして宣言している」ため、この場合、lockedDoors 変数は常にローカル文字列 lockedDoors オブジェクトを参照します。そのため、エラーがスローされます。別の名前を使用するか、変数を上で宣言してください。

于 2013-11-29T06:55:07.127 に答える