关于我的扑克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;
}
}
谢谢!
答案 0 :(得分:5)
我更喜欢Enum
。代码看起来更清晰,IDE可以帮助您避免错过switch
语句中的案例。
答案 1 :(得分:4)
我建议您阅读Joshua Bloch撰写的Effective Java Item 30: Use enums instead of int constants。它解释了在int常量上使用枚举的许多优点。
答案 2 :(得分:2)
使用枚举。因为:
考虑这种方法:
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()。
此外,另外,在扑克服没有排名的情况下 - 你的西装按照排名顺序排列。