2

編集:@オスカー・ロペス

ご指定のコードを追加したところ、次のようになりました: import java.util.HashMap; java.util.Map をインポートします。

public class Character{
    public String name;

    private HashMap<String, String> stats;

    public Character(String charName){
        name = charName;

        stats.put("Strength", "5");
        stats.put("Dexterity", "5");
        stats.put("Constitution", "5");
        stats.put("Intelligence", "5");
        stats.put("Strength", "5");
        stats.put("Wisdom", "5");
    }

    public String getStat(String name) {
        return stats.get(name);
    }

    public static void main(String[] arguments){
        Character tanis = new Character("Tanis");
        System.out.println(tanis.getStat("Dexterity"));             
    }
}

そして、それは正しくコンパイルされているようですがstats.put、ハッシュマップに何かを入れようとしている方法が好きではありません。これを行うにはどうすればよいですか?

import java.util.HashMap;

public class Character{
    public String name;


    private static HashMap<String, String> stats;

    public Character(String charName){
        name = charName;
        stats = new HashMap<String, String>();
        stats.put("Strength", "5");
        stats.put("Dexterity", "5");
        stats.put("Constitution", "5");
        stats.put("Intelligence", "5");
        stats.put("Strength", "5");
        stats.put("Wisdom", "5");
    }

    public String getStat(String statName) {
        return stats.get(statName);
    }

    public static void changeStat(Character character, String statName, String newStatValue) {
        character.stats.put(statName, newStatValue);
    }

    public static void main(String[] arguments){
        Character tanis = new Character("Tanis");
        System.out.println(tanis.getStat("Dexterity"));

        Character xander = new Character("Xander");
        changeStat(xander, "Dexterity", "7");
        System.out.println(xander.getStat("Dexterity"));    
        System.out.println(tanis.getStat("Dexterity"));                 
    }
}

//Prints out
//5
//7
//7

tanis.getStat が 7 に変わるのはなぜですか?

4

3 に答える 3

2

HashMapをクラスの属性として宣言すると、Character意図したとおりにアクセスできます。

public class Character {
    private HashMap<String, String> stats;
    public String getStat(String name) {
        return stats.get(name);
    }
}

// elsewhere
Character tanis = new Character("Tanis");
System.out.println(tanis.getStat("Dexterity"));
于 2013-06-18T02:19:34.300 に答える
0

マップを初期化していません - マップを作成しようとしてもまだ null です。

次のように初期化します。

private Map<String, String> stats = new HashMap<String, String>();

この変更により、コードは問題ありません。


適切なプログラミングの実践に沿って、マップを具体的な実装ではなく抽象型として宣言した方法に注意してください。MapHashMap

于 2013-06-18T02:56:42.523 に答える
0

あなたが何をしようとしているのかは完全にはわかりませんがHashMap、クラスのメンバーであるを作成するのが最善の解決策だと思いますCharacter。したがって、代わりにString mapName、またはそのようなものを使用できますHashMap<String, String> stats。次に、 のマップにアクセスするにはtanis、 と言うでしょうtanis.stats

于 2013-06-18T02:22:08.860 に答える