6

だから私は現在、いくつかのオプションの部分がある大学向けの演習を行っています(クラスでこれをまだ行っていないため)。そのうちの1つは、配列の代わりにリストを使用することです(したがって、可変サイズになります)。ポイントでソートされたリストを印刷します(今すぐそれを取得します)

だから、私はこのように見える Player.java クラスを持っています。

public class Player {
    String name;
    String password;
    int chips;
    int points;

    public Player(String n, String pw, int c, int p) {
        name = n;
        password = pw;
        chips = c;
        points = p;
    }

    public String getName() {
        return name;
    }

    public void setName(String n) {
        name = n;
    }

    public void setPW(String pw) {
        password = pw;
    }

    public String getPW() {
        return password;
    }

    public void setChips(int c) {
        chips = c;
    }

    public int getChips() {
        return chips;
    }

    public void setPoints(int p) {
        points = p;
    }

    public int getPoints() {
        return points;
    }
}

非常に単純です。次に、これを使用してリストを作成しています(別のクラスで):

List<Player> lplayer = new ArrayList<Player>(); 

これでプレーヤーを追加します:

lplayer.add(new Player(n,pw,c,p))`

そして最後にこれで彼らの統計を読んでください:

public int search_Player (String n) {
    String name;
    int i = 0;
    boolean found = false;
    while ((i <= tp) && (!found)) {
        name = lplayer.get(i).getName();
        if (name.equals(n)) {
            found = true;
        }
        i++;
    }
    return (found == true) ? i-1 : -1;
}
public Player show_Player (int i) {
    return lplayer.get(i);
}
public void list_Players() {
    Collections.sort(lplayer);
    int i2;
    if (tp > 0) { // variable which contains number of total players
        for (int i = 0;i<tp;i++) {
            i2 = i+1;
            System.out.println ("\n"+i2+". "+lplayer.get(i).getName()+" [CHIPS: "+lplayer.get(i).getChips()+" - POINTS: "+lplayer.get(i).getPoints()+"]");
        }
    }
    else {
        System.out.println ("There are no players yet.");
    }
}

つまり、基本的にすべてのコードです。ご覧のとおり、私はすでに list_Players 関数を持っていますが、追加された順序で出力するだけです。各プレイヤーが持っているポイント (基本的にはランキング) で並べ替えて印刷する方法が必要です。

ご覧のとおり、私は Java にかなり慣れていないので、非常に複雑な方法を考え出さないようにしてください。

私はすでにそれを検索して Collections.sort(list) のようなものを見つけましたが、それは私がここで必要としているものではないと思います。

ありがとうございました!

4

3 に答える 3

7

public static <T> void sort(List<T> list, Comparator<? super T> c)でオーバーロードを使用できますCollections-必要なコンパレータを提供します(匿名クラスにすることもできます)-これで準備は完了です!

編集これは、メソッドがどのように機能するかを説明します。簡単に言うと、次のように呼び出しを実装します

Collections.sort(list, new Comparator<Player>() {
    int compare(Player left, Player right)  {
        return left.getPoints() - right.getPoints(); // The order depends on the direction of sorting.
    }
});

それでおしまい!

于 2012-05-01T11:27:51.750 に答える
1

Collections.sort(list)あなたの問題の解決策によって間違いなく可能性があります。これは、Java が提供するコレクションを並べ替える方法です。「現実世界」のアプリケーション (コラージュの演習ではありません) を作成している場合は、これがその方法です。

機能させるCollections.sort(list)には、インターフェース呼び出しComparapleを実装する必要があります。このインターフェースを実装することにより、ソートは要素の順序を知ることができます。

しかし、これはコラージュの練習なので、これはおそらく少し簡単です。独自のソート アルゴリズムを実装したい (または実装しなければならない) 場合は、最初に共通の数字のリスト (1、5、2、7...) をソートしてみてください。このようなソート アルゴリズムは、独自のクラスに簡単に拡張できます。

于 2012-05-01T11:30:01.250 に答える
0

ラムダを使用した新しいアプローチは、書くのがずっと短くなります

myList.sort((obj1, obj2)->(condition)?1:-1);

条件にオブジェクトを使用でき、返される 0 より大きいものはスワップを意味します (この場合、条件が true を返す場合)

于 2021-01-16T11:13:08.673 に答える