如何在 Java 中为字符串分配数值?我正在使用从 Ace 到 King 的牌,我想将值 11 分配给“Jack”,这样我就可以将其与“6”进行比较。有任何想法吗?
问问题
4614 次
3 回答
2
如果您使用的语言支持枚举,那么这些可能是您最好的选择。例如,在 C# 中,您可以这样做(这是粗略且未经测试的):
public enum CardDeck
{
1 = 1,
2 = 2,
3 = 3,
...
Jack = 10,
Queen = 11,
King = 12,
Ace = 13
}
然后你可以比较 (if (int)Ace == (int)1) {}
于 2013-11-08T21:39:23.783 回答
1
使用哈希映射:
Map<String,Integer> map = new HashMap<>();
map.put("Jack", 11);
于 2013-11-08T21:53:37.937 回答
0
你有几个选择。例如,您可以将字符串存储在数组中并搜索它们,返回索引:
List<String> names = new ArrayList<String>();
names.add("ace");
names.add("two");
names.add("three");
int number = names.indexOf("ace");
您可以使用字符串到数字的映射并进行查找,这允许使用不连续的数字:
Map<String,Integer> names = new HashMap<String,Integer>();
names.put("ace", 1);
names.put("jack", 11);
names.put("queen", 12);
int number = names.get("ace");
您还可以使用具有属性的枚举,例如:
enum CardValue {
ACE(1),
JACK(11),
QUEEN(12);
final int value;
CardValue (int value) { this.value = value; }
int getValue () { return value; }
}
int number = Enum.valueOf(CardValue.class, "ace".toUpperCase()).getValue();
或者在上面你可以使用ordinal()
如果它们是连续的。
根据需要添加错误处理。
您也可以只使用蛮力 large if
,或使用 switch 块(从 Java 1.7 开始):
int value (String name) {
switch (name.toLowerCase()) {
case "ace": return 1;
case "jack": return 11;
case "queen": return 12;
default: return -1;
}
就个人而言,在您的情况下,我会选择数组或地图方法。它的代码很简单,可以轻松地将字符串转换为值并返回,并且与枚举技术不同,它不会将编译时类型名称与用户输入的字符串联系起来(例如,如果您添加对另一种语言的支持则很难) .
开关块也很容易编码。
于 2013-11-08T21:59:22.577 回答