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)中。 然后找到得分最高的客户。
TreeMap集合从最低的int到最高的int,如下所示:( - 5,0,6,8,110,647)。
我尝试了当前的代码,当客户有0分(全部)时,它工作正常并输出“它工作。”。但是一旦我在其中一个客户中得到200分,就会说“它是空的”。
为什么它最终成为空?
public static Map<Integer, Client> Score = new TreeMap<Integer, Client>();
答案 0 :(得分:5)
此:
Score.get(Score.size() - 1)
将不获取地图的最后一个条目,但是值为Score.size() - 1
的键的值(如果有)。因此,它不起作用是正常的。
由于您使用TreeMap
,这意味着它也是SortedMap
。因此你可以这样做:
// declare the map
final SortedMap<Integer, Client> scores = new TreeMap<>();
// fill the map
// get the last entry
scrores.get(scores.lastKey());
请注意,您最好遵守Java约定:变量名称应以小写字母开头。
另一种方法是将SortedSet
与自定义Comparator
一起使用。
答案 1 :(得分:0)
仔细阅读: http://docs.oracle.com/javase/6/docs/api/java/util/TreeMap.html
您需要的是lastEntry()
答案 2 :(得分:0)
Score.get(Score.size() - 1)
是你的错。 TreeMap.get的不是索引作为参数,而是键对象。