1
    Score.clear();
    for (Client player : getPlayers()) {
        Client c = (Client) player;
        Score.put(c.gameScore, c);
    }

    Client WINNER = Score.get(Score.size() - 1);
    if (WINNER != null) {
        System.out.println("it works.");
    }
    else {
        System.out.println("its a null");
    }

它应该做什么:

遍历所有客户端,然后将客户端的分数、对象添加到 Map 集合(树形图)中。然后找到得分最高的客户。

TreeMap 集合从最低 int 到最高 int,如下所示:(-5, 0, 6, 8, 110, 647)。

我尝试了当前的代码,当客户得分为 0(全部)时,它工作正常并输出“它工作。”。但是一旦我在其中一个客户中获得 200 分,它就会说“它是空的”。

为什么它最终是空的?

public static Map<Integer, Client> Score = new TreeMap<Integer, Client>();
4

3 回答 3

5

这:

Score.get(Score.size() - 1)

不会获取地图的最后一个条目,而是获取值为 的键的值(Score.size() - 1如果有)。因此,它不起作用是正常的。

既然你使用了 a TreeMap,就意味着它也是 a SortedMap。因此你可以这样做:

// declare the map
final SortedMap<Integer, Client> scores = new TreeMap<>();

// fill the map

// get the last entry
scrores.get(scores.lastKey());

请注意,您最好遵守 Java 约定:变量名应以小写字母开头。

另一种选择是将 aSortedSet与 custom一起使用Comparator

于 2013-08-09T13:45:57.507 回答
0

仔细阅读: http: //docs.oracle.com/javase/6/docs/api/java/util/TreeMap.html

你需要的是lastEntry()

于 2013-08-09T13:47:47.303 回答
0

Score.get(Score.size() - 1)

是你的错。TreeMap.get没有索引作为参数,而是键对象。

于 2013-08-09T13:48:08.930 回答