2

私のポーカーJavaプログラムに関連して、charsとintsではなくenumを選択するのは賢明な決断でしょうか?

私が知る限り、charに個別の整数値を割り当てると、カードの値を比較して勝者を決定する際に、数学演算子を簡単に適用できるという利点があります。ただし、これは列挙型で可能かもしれません。そうであれば、私は気づいていません。

誰かが私にそれぞれのadv/disadvを説明できますか?

カードランクを宣言する最初のオプションは、列挙型です。

public enum Rank { 
     DEUCE (1), 
     THREE (2), 
     FOUR (3), 
     FIVE (4), 
     SIX (5),     
     SEVEN (6), 
     EIGHT (7), 
     NINE (8), 
     TEN (9), 
     JACK (10), 
     QUEEN (11), 
     KING (12), 
     ACE (13)
}

public enum Suit { 
     CLUBS (1), 
     DIAMONDS (2), 
     HEARTS (3), 
     SPADES (4) 
}

私の2番目のオプションは、次のようにint値が割り当てられた静的なfinal文字です。

       public static final char ACE =   'A';
       public static final char TWO =   '2';
       public static final char THREE = '3';
       public static final char FOUR =  '4';
       public static final char FIVE =  '5';
       public static final char SIX =   '6';
       public static final char SEVEN = '7';
       public static final char EIGHT = '8';
       public static final char NINE =  '9';
       public static final char TEN =   'T';
       public static final char JACK =  'J';
       public static final char QUEEN = 'Q';
       public static final char KING =  'K';

         public Rank (char c)
         {
             switch (c)
             {
             case TWO:
                 _val = 0;
                 break;
             case THREE:
                 _val = 1;
                 break;
             case FOUR: 
                 _val = 2;
                 break;
             case FIVE: 
                 _val = 3;
                 break;
             case SIX:
                 _val = 4;
                 break;
             case SEVEN:
                 _val = 5;
                 break;
             case EIGHT:
                 _val = 6;
                 break;
             case NINE: 
                 _val = 7;
                 break;
             case 'T':
                 _val = 8;
                 break;
             case 'J':  
                 _val = 9;
                 break;
             case 'Q':
                 _val = 10;
                 break;
             case 'K': 
                 _val = 11;
                 break;
             case 'A':
                 _val = 12;
                 break;
             default:
                 _val = -1;
             }
         }

ありがとう!

4

4 に答える 4

5

私は好むだろうEnumswitchコードはよりきれいに見え、IDE はステートメントでケースを見逃さないようにするのに役立ちます。

于 2013-01-09T20:39:31.843 に答える
4

Joshua Bloch の「Effective Java 」の Item 30: Use enums instead of int constantsを読むことをお勧めします。int 定数よりも列挙型を使用することの多くの利点について説明しています。

于 2013-01-09T20:42:54.543 に答える
2

列挙型を使用します。のため:

  • スタイル-見栄えが良く、きれいです
  • IDE統合-IDEは有効な入力を求めるプロンプトを表示できます
  • メソッドには、範囲チェックが自動的に組み込まれる列挙型を渡すことができます(以下を参照)。
  • 列挙型には、値を返したり計算を行ったりするメソッドを含めることができます
  • 処理しているデータには、変更されない一定の範囲の値があるため、各値の列挙型インスタンスを定義することは理にかなっています

この方法を検討してください。

public static char addCards(char a, char b);

無効な入力で呼び出すことができます

addCards('x', '$');

に組み込まれている範囲チェックはありませんchar。しかし、列挙型を使用すると、無料で提供されます。


ランキングの問題に関しては、列挙型を使用すると、これを簡単に行うことができます

Rank r1, r2;
boolean r1RankedHigherThanR2 = r1.ordinal() > r2.ordinal();

列挙型インスタンスを定義する順序は、ランキングの順序を伝えるのに十分です。

于 2013-01-09T20:48:24.813 に答える
0

列挙型には序数 (0 ベース) があります。したがって、それを使用してそれらをランク付けできますが、おそらくそれを複製しないでください。例: KING.ordinal()。

また、余談ですが、ポーカーではスーツにランクはありません。スーツはブリッジ ランク順です。

于 2013-01-09T20:42:32.067 に答える