如何为Java中的字符串分配数值?我正在使用从Ace到国王的牌,我想将值11分配给“Jack”,这样我就可以将它与“Six”进行比较。 有什么想法吗?
答案 0 :(得分:2)
如果你使用支持枚举的语言,这些可能是你最好的选择。例如,在C#中,你可以这样做(这是粗略的,未经测试的):
public enum CardDeck
{
1 = 1,
2 = 2,
3 = 3,
...
Jack = 10,
Queen = 11,
King = 12,
Ace = 13
}
然后你可以比较(if(int)Ace ==(int)1){}
答案 1 :(得分:1)
使用HashMaps:
Map<String,Integer> map = new HashMap<>();
map.put("Jack", 11);
答案 2 :(得分: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()
。
根据需要添加错误处理。
您也可以使用强力大if
,或使用切换块(自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;
}
就个人而言,我会在你的情况下采用阵列或地图方法。编码很简单,允许将字符串轻松转换为值和返回,并且与枚举技术不同,它不会将编译时类型名称与用户输入字符串联系起来(例如,如果您添加对另一种语言的支持则很难)
开关块也很容易编码。