编辑: @Oscar Lopez
我已添加您指定的代码,现在具有以下内容: import java.util.HashMap; import 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
内容放入hashmap的方式,我应该怎么做呢?
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?
答案 0 :(得分: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"));
答案 1 :(得分:0)
我不完全确定您要做的是什么,但我相信最好的解决方案是让HashMap
成为您Character
班级的成员。因此,您可以拥有String mapName
或类似内容,而不是HashMap<String, String> stats
。然后,要访问tanis
的地图,您会说tanis.stats
。
答案 2 :(得分:0)
您尚未初始化地图 - 当您尝试填充地图时,它仍然为空。
像这样初始化:
private Map<String, String> stats = new HashMap<String, String>();
通过此更改,您的代码就可以了。
请注意我是如何根据良好的编程习惯将地图声明为 abstract 类型Map
,而不是具体实现HashMap
。