2013-12-07 31 views
1

我使用树状图创建了评分系统,我只想显示前3个结果。
当玩家输入第四个结果(如果它大于当前最小值),我如何让它删除最小值并将其替换为新值。

我的代码到目前为止排序分数:从树状图中删除最小密钥

Map<Integer, String> treeMap = new TreeMap<Integer, String>(new MyCopr()); 
    treeMap.put(name1val, name1); 
    treeMap.put(name2val, name2); 
    treeMap.put(name3val, name3); 
    treeMap.put(tempval, tempname); 

    for (Map.Entry<Integer, String> entry : treeMap.entrySet()) { 
     playername1.append("Key : " + entry.getKey() + " Value : " 
       + entry.getValue() + "\n"); 
    } 
} 

class MyCopr implements Comparator<Integer> { 
    @Override 
    public int compare(Integer lhs, Integer rhs) { 
     return rhs.compareTo(lhs); 
    } 
} 

从这里我能做些什么来代替最小值?谢谢。

+0

难道你不能只是添加新的值,然后得到前三名毕竟说和做? – hichris123

回答

3

我会用一组分数(像这样) -

private static int MAX_SCORES = 3; 
private SortedSet<Score> scores = new TreeSet<Score>(); 

public Set<Score> getScores() { 
    return scores; 
} 

public void addScore(String name, int score) { 
    scores.add(new Score(name, score)); 
    while (scores.size() > MAX_SCORES) { 
    scores.remove(scores.first()); 
    } 
} 

private class Score implements Comparable<Score> { 
    private String name; 
    private int score; 

    private Score(String name, int score) { 
    this.name = name; 
    this.score = score; 
    } 

    public int compareTo(Score obj) { 
    if (this == obj) { 
     return 0; 
    } 
    if (this.score < obj.score) { 
     return -1; 
    } else if (this.score > obj.score) { 
     return 1; 
    } 
    return name.compareTo(obj.name); 
    } 

    public String toString() { 
    return name + " - score = " + score; 
    } 
} 

,然后用它是这样的...

System.out.println(obj.getScores()); 
obj.addScore("Player 1", 1); 
obj.addScore("Player 2", 2); 
obj.addScore("Player 3", 3); 
System.out.println(obj.getScores()); 
obj.addScore("Player 4", 4); 
System.out.println(obj.getScores()); 

其中产量这(当我运行它) -

[] 
[Player 1 - score = 1, Player 2 - score = 2, Player 3 - score = 3] 
[Player 2 - score = 2, Player 3 - score = 3, Player 4 - score = 4]