我在每个玩家的HashMap中计算得分:
public Map<String, Integer> PScore = new HashMap<String, Integer>();
现在我想保存并加载HashMap并在Config.yml中。 Config已存在且正在使用其他变量。
这是我多次尝试解决问题的方法:
public void saveHash()
{
for (String string : PScore.keySet())
{
this.getConfig().set("score.pscore", string);
this.saveConfig();
}
}
public void loadHash()
{
}
但在配置中我只得到:
score:
pscore: JackerNils
加载功能为空,因此加载时当然没有任何反应。保存和加载函数由onEnable()和onDisable()
控制//编辑:
public Map<String, Integer> PScore = new HashMap<String, Integer>();
public void saveHash()
{
List<String> s = this.getConfig().getStringList("PScore");
for(String str : PScore.keySet())
{
s.add(str + ":" + PScore.get(str));
}
this.getConfig().set("PScore", s);
this.saveConfig();
}
public void loadHash()
{
List<String> s = this.getConfig().getStringList("PScore");
for(String str: s)
{
String words[] = str.split(":");
PScore.put(words[0], Integer.parseInt(words[1]));
}
}
此方法现在运行正常,但请查看Config的功能:
PScore:
- JackerNils:5
- JackerNils:19
所以你看到了吗?它不是覆盖它,而是重复。
答案 0 :(得分:0)
问题是saveConfig
,它的作用是保存和覆盖每次循环执行后你正在做的当前文件,导致在循环结束后只有一个来自hashmap的值被保存。您可以做的是在设置所有值后保存配置,如下所示:
for (String string : PScore.keySet())
{
this.getConfig().set("score.pscore", string);
}
this.saveConfig();
另请注意,您要将所有值添加到配置中的相同部分。改为保存数组。