使用带有多个整数Java的If语句

时间:2013-11-29 00:10:43

标签: java if-statement

我正在制作基于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");
    }

但是

4 个答案:

答案 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);