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

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

据我所知,为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) } 

我的第二个选项是静态最终字符,其中分配的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; } } 

谢谢!

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

我建议你阅读第30项:使用枚举而不是 Joshua Bloch的Effective Java中的int常量 。 它解释了在int常量上使用枚举的许多优点。

使用枚举。 因为:

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

考虑这种方法:

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

我可以用无效输入来调用它

 addCards('x', '$'); 

没有使用char内置的范围检查。 但是对于枚举,它是免费的。

至于你的排名问题,你可以通过枚举来做到这一点

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

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

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

此外,另外,在扑克服没有等级 – 你有你的西装在桥级排序。