我正在制作基于java的纸牌游戏'War'文本。我的代码工作正常,但我认为应该有一个更简单的方法:
if (cardValue == 1 || cardValue == 5 || cardValue == 9 || cardValue == 13 || cardValue == 17 || cardValue == 21 || cardValue == 25 || cardValue == 29 || cardValue == 33 || cardValue == 37 || cardValue == 41 || cardValue == 45 || cardValue == 49 || ){
System.out.println("Clubs");
}
等等,用于钻石,心形和黑桃。有更简单的方法吗?我在想这样的事情:
if (cardValue == 1, 5, 9, 13, 17, 21, 25, 29, 33){
System.out.println("Clubs");
}
或者
if (cardValue == (1, 5, 9, 13, 17, 21, 25, 29, 33)){
System.out.println("Clubs");
}
但是
答案 0 :(得分:6)
好吧,您可以使用Set
并测试会员资格:
Set<Integer> values =
new HashSet<Integer>(Arrays.asList(1, 5, 9, 13, 17, 21, 25, 29, 33));
if (values.contains(cardValue)) {
System.out.println("Clubs");
}
当然,它有点冗长。 Java不是 最具表现力的语言,但你想要做的事情很常见,其他更动态的语言也有它的语法。仅仅为了比较,这就是Python中相同的代码片段 - 这更接近你的想象:
if cardValue in (1, 5, 9, 13, 17, 21, 25, 29, 33):
print("Clubs")
答案 1 :(得分:3)
您可以使用实用程序方法Arrays.binarySearch()
:
int[] nums = {1, 5, 9, 13, 17, 21, 25, 29, 33}; // must be in order
if (Arrays.binarySearch(nums, cardValue) >= 0)
System.out.println("Clubs");
}
请注意,int值必须按数字顺序才能使此代码有效。也就是说,它会表现得非常好。
答案 2 :(得分:0)
更改架构。没有单个字段意味着排名和适合。有一个排名字段{A,2,3,4,5,6,7,8,9,10,J,Q,K}
和一个诉讼字段{Clubs, Diamonds, Hearts, Spades}.
答案 3 :(得分:0)
在这种情况下,您可以使用modulo:
if (cardValue % 4 == 1) {
System.out.println("clubs");
}
但这需要所有卡牌值分别为1,5,9,13 ......
是相同的颜色。
2,6,10,14,......是另一种颜色
3,7,11,15,......是第三种颜色
0,4,8,12,...是最后一种颜色。
然后,您可以使用(cardValue % 4)
识别颜色(结果为0,1,2或3)。
以下是打印颜色的代码。 (您可能有不同的颜色顺序)
String color = null;
switch (cardValue % 4) {
case 0:
color = "hearts";
break;
case 1:
color = "clubs";
break;
case 2:
color = "spade";
break;
default:
color = "diamond";
break;
}
System.out.println(color);