1

2 枚のカードの値の差を返すメソッドを書きたいと思います。私は列挙型を学んでいて、それを実装する最も効率的な方法がわからないので混乱しています。

public class Card implements Comparable<Card> {
public enum Rank {TWO, THREE, FOUR, FIVE, SIX,SEVEN, EIGHT, NINE, TEN, 
                    JACK, QUEEN, KING, ACE}
public enum Suit {CLUBS, DIAMONDS, HEARTS, SPADES}

public static int difference(Card c){

}

ヘルプやガイダンスをいただければ幸いです。

4

2 に答える 2

4
public enum Rank {ACE(1), TWO(2); /* obviously add the other values*/
    private int value  ;
    Rank(int value){
        this.value = value;
    };
    public int getValue(){
       return this.value;
    }

    public int calcDifference(Rank rank){
        return getValue() - rank.getValue();
    }

};

これは次のように呼び出すことができます:

Rank rankAce =  Rank.ACE;
System.out.println(rankAce.calcDifference(Rank.TWO));

int 値を削除して序数のみを使用することもできますが、この方法では多少の柔軟性が得られます。

于 2012-11-07T15:29:26.307 に答える
1

カードの値を定義する最も簡単な方法は、スーツの 13 倍をランクに追加するか、ランクの 4 倍をスーツに追加することです。

public int faceValue(Card c) {
    return 13*c.getSuit().ordinal()+c.getRank().ordinal();
}

また

public int faceValue(Card c) {
    return 4*c.getRank().ordinal()+c.getSuit().ordinal();
}

どちらの方法でも から0まで51の数値が生成されます。

手でfaceValue、次のように差分関数を定義できます。

public static int faceValueDifference(Card left, Card right){
    return left.faceValue()-right.faceValue();
}
于 2012-11-07T15:31:47.947 に答える