6

CardRankを表す次の列挙型があります

public enum CardRank
{
    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 CardRank(char symbol)
    {
        this.symbol = symbol;
    }

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

CardRank昇順で表されます。どのランクが他のランクよりも大きいかを知るために、ランクを比較する必要があります。演算子は数値では使用でき>ますが、char値では使用できません。

// this will print out TRUE for all numerical values compared 
// but FALSE for the chars
if (card.getRank().getSymbol() > anotherCard.getRank().getSymbol()) {
    System.out.println("true");
} else {
    System.out.println("false");
}

何か案は?

4

2 に答える 2

15
if (card.getRank().compareTo(anotherCard.getRank()) > 0)

必要なものです。

序数を使用することもできます。

if (card.getRank().ordinal() > anotherCard.getRank().ordinal())

列挙型には、序数によって定義された自然な順序があります。そして、列挙型の序数は、宣言内の位置に基づいて帰属されます。したがって、DEUCEの序数は0、TREYの序数は1などです。

于 2012-05-19T17:44:22.970 に答える
1

これにはコンパレータの使用を検討してください。必要に応じて、パブリック静的内部クラスにすることができます。

import java.util.Comparator;

public enum CardRank implements Comparable<CardRank> {
   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 static CardRankComparator cardRankComparator = new CardRankComparator();

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

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

   public int compareRank(CardRank otherCardRank) {
      return cardRankComparator.compare(this, otherCardRank);
   }

   // public so that this can be used for sorting if need be
   public static class CardRankComparator implements Comparator<CardRank> {
      private static final String RANKS = "23456789TJQKA";

      @Override
      public int compare(CardRank cr1, CardRank cr2) {
         int rank1 = RANKS.indexOf(String.valueOf(cr1.getSymbol()));
         int rank2 = RANKS.indexOf(String.valueOf(cr2.getSymbol()));
         return rank1 - rank2;
      }
   }
}
于 2012-05-19T17:55:34.837 に答える