0

私が取り組んでいるゲームのハイスコア画面を作成しようとしています。以前のプレイヤーのトップ 10 スコアと、プレイを終了したばかりのプレイヤーのスコアをランキング (ハイスコアのリストの順序) とともに表示したいと考えています。このハイスコアのリストは、スコアに従ってソートされ、スコアが同じ場合はスコアに従ってソートされます。私はこれをしようArrayListsTreeSetsしました。これらの両方を取得してデータを適切に並べ替えることができますが、プレイを終了したばかりのプレーヤーの特定の情報を引き出すのに問題があります。

マップを見てきましたが、データを並べ替えたい方法では機能しないようです。誰かがこの問題の解決策を教えてもらえますか?

以下は、そのうちの 1 つのために作成した小さなスクラッチ プログラムです。

public class Tree_set_test {

    public static void main(String[] args) throws IOException {
        String sName;
        int nAge, nNum, i=0;
        SortedSet<CFriend> tsFriends = new TreeSet<CFriend>();

        sName = "Jason";
        nAge = 5000;
        nNum = tsFriends.size() + 1;
        CFriend c1= new CFriend(sName,nAge,nNum);
        tsFriends.add(new CFriend(sName,nAge,nNum)); 

        sName = "Kenny";
        nAge = 200;
        nNum = tsFriends.size() + 1;
        CFriend c2= new CFriend(sName,nAge,nNum);
        tsFriends.add(new CFriend(sName,nAge,nNum)); 

        sName = "Smile";
        nAge = 100;
        nNum = tsFriends.size() + 1;
        tsFriends.add(new CFriend(sName,nAge,nNum)); 

        sName = "Hossein";
        nAge = 200;
        nNum = tsFriends.size() + 1;
        tsFriends.add(new CFriend(sName, nAge,nNum)); 

        sName = "People";
        nAge = 200;
        nNum = tsFriends.size() + 1;
        tsFriends.add(new CFriend(sName, nAge,nNum)); 

        Iterator itFriends = tsFriends.iterator(); // see note below on iterators.
        while (itFriends.hasNext()) {
            i++;
            System.out.println(itFriends.next());
        }
    }
}

class CFriend implements Comparable<CFriend> { 
    String sName;
    int nScore, nNum;

    CFriend(String _sName, int _nAge, int _nNum) {// constructor to load vars
        sName = _sName;
        nScore = _nAge;
        nNum=_nNum;
    }

    public int compareTo(CFriend other) {
        if (nScore > other.nScore) {
            return -1;
        }
        else if (nScore < other.nScore) {
            return 1;
        }
        else {
            if (sName.compareTo(other.sName) < 0) {
                return -1;
            }
            else if (sName.compareTo(other.sName) > 0) {
                return 1;
            }
            else {
                return 0;
            }
        }
    }

    public String toString() {
        return sName + " " + String.valueOf(nScore);
    }
}

c1c2が のどこにあるかを確認し、とTreeSetと一緒に表示したい。nameage

4

1 に答える 1

0

名前とスコアを持つ Player クラスを作成できます。次に、Comparableインターフェイスを実装します。参照: http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Comparable.html

Player オブジェクトを ArrayList に保存し、次を使用して並べ替えることができます。Collections.Sort(yourArrayList);

Player クラスは次のようになります。

public class Player implements Comparable<Player>{

int score;
String name;

@Override
public int compareTo(Player o) {

//compare here

}


}
于 2012-06-07T13:06:42.353 に答える