哪个更适合静态数据 - 最终的char或enum?

时间:2013-01-09 20:37:26

标签: java enums char int poker

关于我的扑克Java计划,选择枚举超过字符和整数是明智的决定吗?

据我所知,为char分配一个单独的整数值有一个好处,就是在比较卡片值来决定胜利者时,应用数学运算符。然而,这可能是枚举,如果是这样,我不知道。

请有人向我解释每个人的优先事项吗?

我宣布卡片排名的第一个选择是枚举:

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) 
}

我的第二个选项是静态最终字符,其中分配了int值:

       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 个答案:

答案 0 :(得分:5)

我更喜欢Enum。代码看起来更清晰,IDE可以帮助您避免错过switch语句中的案例。

答案 1 :(得分:4)

我建议您阅读Joshua Bloch撰写的Effective Java Item 30: Use enums instead of int constants。它解释了在int常量上使用枚举的许多优点。

答案 2 :(得分:2)

使用枚举。因为:

  • 风格 - 它们看起来更好更清洁
  • IDE集成 - IDE可以提示您输入有效的
  • 方法可以传递自动充满范围检查的枚举(见下文)
  • 枚举可以有方法返回值和/或进行计算
  • 您正在处理的数据具有一定数量的值,这些值不会发生变化,因此为每个值定义枚举实例是有意义的

考虑这种方法:

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

我可以使用无效输入

来调用它
addCards('x', '$');

char内置了范围检查。但是对于枚举,它是免费的。


至于你的排名问题,你可以使用枚举

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

您定义枚举实例的顺序足以传达排名顺序。

答案 3 :(得分:0)

枚举具有序数(从0开始)。所以你可以用它来对它们进行排名,你可能不应该重复它。例如KING.ordinal()。

此外,另外,在扑克服没有排名的情况下 - 你的西装按照排名顺序排列。