-2

私は現在小さな問題を抱えています.Javaでゲームを作っていて、そのゲームのハイスコアを作っています. プレイヤー名とスコアをテキストファイルに保存するようにしました。印刷しようとすると、明らかにテキスト ファイルの順序で表示されます。どのように並べ替えると、最初に最高のスコアが使用されるのでしょうか。

テキスト ファイルの例:

John: 12
Bert: 16
Oscar: 18
Eric: 25
Carl: 9

どのように私はそれをしたい:

Eric: 25
Oscar: 18
Bert: 16
John: 12
Carl: 9
4

2 に答える 2

1

ソートを使用してみてください Collections.sort(list);

于 2013-06-07T16:55:49.913 に答える
1

TreeMapエントリ (キーと値のマッピング) をキーの自然な順序で保持するような、並べ替えられたコレクションを使用します。ハイスコ​​アでソートしたいので、スコアをキーとして、プレーヤー名を値として保持します。

// instantiate your sorted collection
Map<Integer, String> highestScores = new TreeMap<Integer, String>();

// setup a file reader
BufferedReader reader = new BufferedReader(
                        new FileReader(new File("/path/to/file")));

String line = null;
while ((line = reader.readLine()) != null) { // read your file line by line
    String[] playerScores = line.split(": ");
    // populate your collection with score-player mappings
    highestScores.put(Integer.valueOf(playerScores[1]), playerScores[0]);
}

// iterate in descending order
for (Integer score : highestScores.descendingKeySet()) {
    System.out.println(highestScores.get(score) + ": " + score);
}

出力

Eric: 25
Oscar: 18
Bert: 16
John: 12
Carl: 9

編集:
2 人以上のプレイヤーが同じハイスコアを持つ可能性が非常に高いです。そのため、ソートされたコレクションはもう少し複雑になる必要がありますが、上記を理解していれば、これを理解するのに問題はありません。

スコアをプレーヤーにマッピングする代わりに、List(同じ高スコアを持つ) プレーヤーにマッピングする必要があります。

// {key - value} = {high score - {list, of, players}}
TreeMap<Integer, List<String>> highestScores =
                               new TreeMap<Integer, List<String>>();

BufferedReader reader = new BufferedReader(
                        new FileReader(new File("/path/to/file")));

String line = null;
while ((line = reader.readLine()) != null) {
    String[] playerScores = line.split(": ");
    Integer score = Integer.valueOf(playerScores[1]);
    List<String> playerList = null;

    // check if a player with this score already exists
    if ((playerList = highestScores.get(score)) == null) { // if NOT,
        playerList = new ArrayList<String>(1); // CREATE a new list
        playerList.add(playerScores[0]);
        highestScores.put(Integer.valueOf(playerScores[1]), playerList);
    } else { // if YES, ADD to the existing list
        playerList.add(playerScores[0]);
    }
}

// iterate in descending order
for (Integer score : highestScores.descendingKeySet()) {
    for (String player : highestScores.get(score)) { // iterate over player list
        System.out.println(player + ": " + score);
    }
}

出力

Eric: 25
Oscar: 18
Bert: 16
John: 12 *
Jane: 12 *
Carl: 9
于 2013-06-07T17:22:47.223 に答える