0

如何在 Java 中为字符串分配数值?我正在使用从 Ace 到 King 的牌,我想将值 11 分配给“Jack”,这样我就可以将其与“6”进行比较。有任何想法吗?

4

3 回答 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 回答