2012-05-01 4 views
5

私は現在、いくつかのオプションパーツを持っているカレッジのための練習をしています(クラスでこれをやっていないので、配列の代わりにリストを使用していますそれで可変サイズになるでしょう)そして別のものはポイントでソートされたリストを印刷します(私はそれに今得ます)カスタムクラスを含むリストをソートする

私は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)のようなものを見つけましたが、私はここに必要なものではないと思います。

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

+0

間違いなく 'Collections.sort'が必要です。他の基準ではなくスコアでソートする必要がある場合は、 'public class Player implements Comparable 'と書いて、必要なメソッドを実装してください。 –

+0

'総選手の数を含む変数'のような簡単なことをコメントする必要がある場合は、より良い変数名を使用する必要があります。 –

+0

'int search_Player(String n)'のようなメソッドが何をするのかを考えるのも非常に難しいです。 'Player getPlayerByName(String name)'については(前のメソッドの署名が明示的に割り当てによって求められていない限り)? –

答えて

7

Collectionspublic static <T> void sort(List<T> list, Comparator<? super T> c)オーバーロードを使用することができます - あなたが必要とするコンパレータを提供する(匿名クラスにすることができます) - あなたはすべて設定されています!

編集Thisは、方法の仕組みを説明しています。手短に言えば、あなたの電話は

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. 
    } 
}); 

として実装されます。

+1

これをもう少し詳しく教えてもらえますか?私がリストを使って何かをするのは今回が初めてです。私はまだ彼らに慣れています – zaakun

1

Collections.sort(list)あなたの問題の解決策は間違いありません。これは、Javaが提供するコレクションをソートする方法です。あなたが "現実世界"のアプリケーション(コラージュのためのエクササイズではありません)を書いているなら、これはあなたがやっているやり方です。

Collections.sort(list)を動作させるには、Comparapleというインターフェイスコールを実装する必要があります。このインタフェースを実装することで、ソートはエレメントの順序を知ることができます。

しかし、それはコラージュのための演習なので、これはおそらく少し簡単です。独自のソートアルゴリズムを実装したい場合(または実装する必要がある場合)は、まず番号の共通リスト(1、5、2、7 ...)をソートしてみてください。このようなソートアルゴリズムは、自分のクラスに合わせて簡単に拡張することができます。

+0

それは複雑である必要はありません。私が言ったように、我々はまだこれをやっていない、オプションの部分は、Javaで少し進んだ人々のためだけだった。それが何とかCollections.sort(list)で動作するなら、それは問題ありません! – zaakun