2017-03-28 1 views
0

에/부하의 HashMap를 저장 I는 각 플레이어의의 HashMap에 점수를 계산 .yml. 구성이 기존 및 다른 varibales에 사용 중입니다. 1.11 자바 스피/Bukkit 프로그래밍 Config.yml

문제 해결하기 나의 많은 시도했다 :

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

문제는 saveConfig입니다. 루프를 실행 한 후에 수행중인 현재 파일을 저장하고 덮어 쓰게되므로 루프가 완료된 후 해시 맵에서 하나의 값만 저장됩니다.

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

또한 당신이 설정에서 같은 섹션으로 모든 값을 추가하는 명심 : 당신이 할 수있는 것은이 같은 모든 값을 설정 한 후 설정을 저장합니다. 배열을 대신 저장하십시오.

+0

내 편집 좀 봐주세요! 이 예제에서는 모두 정상적으로 작동하지만 저장 만 약간 잘못되었습니다. – JackerNils

+0

getStringList를 사용하는 대신 새로운 arraylist를 생성 해보십시오. 지금은 목록을 얻은 다음 목록의 모든 값을 목록에 다시 추가하여 중복 결과를 얻습니다. 보십시오'List s = new ArrayList (); ' – Squiddie

+1

나를 위해 일한 Joop! ;) 도와 줘서 고맙다! – JackerNils