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 コレクションは、(-5, 0, 6, 8, 110, 647) のように、最小の int から最大の int に移動します。

クライアントのスコアが 0 (すべて) の場合、現在のコードを試してみましたが、正常に動作し、「動作します」と出力されます。しかし、クライアントの 1 つに 200 のスコアを取得すると、「null です」と表示されます。

nullになってしまうのはなぜですか?

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

3 に答える 3

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 の規則に従うことが望ましいことに注意してください。変数名は小文字で始める必要があります。

別の方法として、SortedSeta を custom とともに使用することもできますComparator

于 2013-08-09T13:45:57.507 に答える