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

我不完全确定您要做什么,但我相信最好的解决方案是让一个HashMap成为您Character班级的成员。因此,代替String mapName, 您可以拥有HashMap<String, String> stats或类似的东西。然后,要访问 的地图tanis,您会说tanis.stats

于 2013-06-18T02:22:08.860 回答
0

您尚未初始化地图 - 当您尝试填充它时它仍然为空。

像这样初始化它:

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

通过此更改,您的代码将正常。


请注意我如何根据良好的编程习惯将映射声明为抽象类型Map,而不是具体实现HashMap

于 2013-06-18T02:56:42.523 回答