2016-04-15 9 views
0

JavaでCardを表すクラスにComparatorクラスを追加する必要があります。 1つの比較器(compareAscending)は、カードを昇順にソートし、最初にソートしてランク付けする(すなわち、スペード、ハート、ダイヤモンド、クラブ、そして値順に並べる)。第2の比較器(compareRank)は、ランクの昇順、すなわちすべての2つの順、次にすべての3つの順にソートする。 。JavaクラスでComparatorクラスを挿入する

スーツとランクが両方列挙型であり、それらのコードは、

enum Rank { 

    TWO(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8), 
    NINE(9), TEN(10), JACK(10), QUEEN(10), KING(10), ACE(11); 

    private int value; 

    Rank(int i) { 
     value = i; 
    } 

    public int getValue() { 
     return value; 
    } 

    public Rank getPrevious() { 
     return values()[ordinal() > 0 ? ordinal() - 1 : 0]; 
    } 

} 

enum Suit { 

    CLUBS, DIAMONDS, HEARTS, SPADES; 

    public static Suit randomSuit() { 
     Random random = new Random(); 
     return values()[random.nextInt(values().length)]; 
    } 
} 

アイブ氏の下に誰かが、私はそれらを挿入するに取り掛かる方法を説明することができればそう思っていた、前コンパレータクラスを使用されることはありませんか?彼らはクラスを同等にする(それは同じですか?)

ありがとうございます。あなたも、あなたは、コードの重複を避けるためにあなたのcompareToメソッドの定義のコンパレータのいずれかを使用することができます

comparator.compare(a, b); 

a.compareTo(b) 

は次のようになります。

+0

これらの比較メソッドでCardクラスを作成できます。単に '.ordinal()'を使って列挙型配列内の列挙型の位置を取得し、そのように比較してください。 – vedi0boy

+0

チュートリアルを求めています。 *あなたは自分でコードを書くことはできないのですか? – Raedwald

+0

それらを「挿入」する必要はなく、2つの「Comparator」実装を作成し、そのComparatorのインスタンスをソート関数に渡して使用するだけです。 – Krease

答えて

4

Comparator<Card>は、多かれ少なかれ同じComparable<Card>を実装するようです。

public class Card implements Comparable<Card> { 
    public static final Comparator<Card> COMPARE_ASCENDING = (a, b) -> { /* compare here */ }; 
    public static final Comparator<Card> COMPARE_DESCENDING = (a, b) -> { /* compare here */ }; 

    @Override 
    public int compareTo(Card other) { 
     // Ascending is the "default" sort: 
     return COMPARE_ASCENDING.compare(this, other); 
    } 
} 

次に、このように使用することができます:

List<Card> cards = ...; 
Collections.sort(cards); // #1 
Collections.sort(cards, Card.COMPARE_ASCENDING); // #2, same as #1 
Collections.sort(cards, Card.COMPARE_DESCENDING); // #3 

また、このような低いカードの代わりに、高いカードとしてエースを検討したものなど、他の一般的なコンパレータを、追加することができます。ゲームは独自のゲーム固有のコンパレータを実装することもできますが、それらはあなたのCardクラスには含まれません。