-5

私はカードArrayList handのarraylistを持っています。hand={2S,3H,2D,6H,4C} とします。を取得できるように、arraylist ハンドをソートするメソッドが必要ですhand = {4C,2D,3H,6H,2S}。enum に method があることは知っていますが、compareTo()使い方がわかりません。誰でも私にいくつかのガイダンスを与えることができますか?

public class PlayingCard implements Comparable
 {
//Instance Variables
private Suit suit;
private Rank rank;

//Constructor
public PlayingCard(Suit suit, Rank rank)
{
    this.suit = suit;
    this.rank = rank;
}
....
 public int compareTo(Object other)
 {
  PlayingCard that = (PlayingCard)other;

  if (this.suit == that.suit)
     return -this.rank.compareTo(((PlayingCard)other).rank);

  return -this.suit.compareTo(((PlayingCard)other).suit);         
 }

//============================================================================
 //Representation of the Suit of a Playing-Card
public enum Suit
{
    CLUBS('C'), DIAMONDS('D'), HEARTS('H'), SPADES('S');

    private char symbol;

    private Suit(char symbol)
    {
        this.symbol = symbol;
    }

    public char getSymbol()
    {
        return this.symbol;
    }
}

//============================================================================  
 //Representation of the Rank os a Playing-Card
public enum Rank
{
    DEUCE('2'), TREY('3'), FOUR('4'), FIVE('5'), SIX('6'), SEVEN('7'),
    EIGHT('8'), NINE('9'), TEN('T'), JACK('J'), QUEEN('Q'), KING('K'), ACE('A');

    private char symbol;

    private Rank(char symbol)
    {
        this.symbol = symbol;
    }

    public char getSymbol()
    {
        return this.symbol;
    }
}
}

--------------------------------------------------------------------------------------
public class PlayingCardHand {
//Instance Variables

private int cardsInCompleteHand;     //Maximum # cards in this hand
private ArrayList<PlayingCard> hand; //A hand of Playing-Cards
private Comparator comparer;         //Client-provided comparison of PlayingCards

//Constructor
//Appropriate when PlayingCard compareTo() is to be used to compare PlayingCards
public PlayingCardHand(int handSize) {

    if (handSize < 1) {
        throw new RuntimeException("Hand size cannot be less than 1");
    }
    cardsInCompleteHand = handSize;
    hand = new ArrayList<PlayingCard>();

}
...
public void sortCards() 
{
}
4

1 に答える 1

3

最初に でソートし、が等しい場合は でソートするcompareTo()メソッドを に追加する必要があります。Guavaを使用する場合は、非常に簡単です。CardRankRankSuit

public class Card implements Comparable<Card>
{
  private Rank rank;
  private Suit suit;

  ...

  public int compareTo(Card that) 
  {
    return ComparisonChain.start()
      .compare(this.rank, that.rank)
      .compare(this.suit, that.suit)
      .result();
  }
}

の Javadoc は次のとおりですComparisonChain

ハンドが であると仮定すると、List<Card>を使用してリストを並べ替えることができますCollections.sort(hand)

于 2013-05-21T00:54:04.703 に答える