2017-03-28 4 views
0

に私は、各プレーヤーのためのHashMapでスコアをカウント:1.11 Javaのスピゴット/ Bukkitプログラミング - 保存/読み込みのHashMap Config.yml

public Map<String, Integer> PScore = new HashMap<String, Integer>(); 

今、私はHashMapを保存してロードすると、コンフィグレーションで。 Configは既存で、他のvaribalesにはUseで使用します。

これは、問題を解決するために、私の多くの試みだった:

public void saveHash() 
{ 
    for (String string : PScore.keySet()) 
    { 
     this.getConfig().set("score.pscore", string); 
     this.saveConfig(); 
    } 
} 

public void loadHash() 
{ 
} 

しかしConfigで私が唯一の取得:

score: 
pscore: JackerNils 

をロードする機能が空であるので、何も搭載しながら、もちろん起こりません。保存と読み込み機能がonEnable()とonDisable()によって制御されている

// EDIT:このメソッドは、現在正常に動作しますが、見ている

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

問題はsaveConfigです。ループ実行ごとに実行している現在のファイルを保存して上書きするだけで、ループが終了してからハッシュマップの値が1つだけ保存されます。

for (String string : PScore.keySet()) 
    { 
     this.getConfig().set("score.pscore", string); 
    } 
this.saveConfig(); 

また、あなたが設定内の同じセクションにすべての値を追加している点に注意してください。あなたは何ができることは、このようにすべての値を、設定した後、設定を保存しています。代わりに配列を保存してください。

+0

私の編集を見てください!この例ではすべて正常に動作しますが、保存はちょっと間違っています。 – JackerNils

+0

getStringListを使用する代わりに、新しいarraylistを作成してみてください。今すぐリストを取得してから、リストのすべての値をリストに再度追加して、重複しています。試してみてくださいリスト s = new ArrayList (); ' – Squiddie

+1

私のために働いたJoop! ;)助けてくれてありがとう! – JackerNils

関連する問題