什么是创建54张牌的好方法,包括使用Java的笑话

时间:2013-06-14 19:09:16

标签: java

我使用以下代码购买了52张非Joke​​r卡

/**
the Card class
*/
public class Card 
    {
        private int suit;
        private int rank;
        private String[] suits = {"Spades", "Hearts", "Clubs", "Dimonds"};
        private String[] ranks = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"};

      public Card (int suit, int rank)
          {
              this.suit = suit;
              this.rank = rank;
          }

      public String toString()
          {
              return ranks[rank] + " of " + suits[suit]; 
          }//end toString()

      public int getRank()
          {
              return rank;
          }

      public int getSuit()
          {
              return suit;
          }
    }//end Card class

我怎样才能添加两个Jokers?

3 个答案:

答案 0 :(得分:4)

所以有几种简单的方法可以做到这一点。首先是创建一个新的套装,小丑,并忽略它的排名。这套新西装只有两张牌。如果西装是小丑,你可能想要覆盖等级以返回常数。

另一种方法是拥有一个标志isJoker,并为其创建true。在这种情况下,如果isJokertrue,您需要覆盖某些行为(例如toString)。

在其他语言中,表示卡片的经典方法是将其存储为单个整数0-51。等级为value%13,诉讼为value/13。在此表示中,jokers将为52和53,并且可以使用if(value > 51)进行检查。

使用任何可以让您最简单地实现卡片所需的内容,它们之间没有太大区别。

答案 1 :(得分:0)

由于jokers没有诉讼,你可以让suit成为无效值,比如-1,然后在你的代码中检查它:

public String toString()
{
    if (suit < 0) // suit is -1 for jokers
        return "Joker";
    return ranks[rank] + " of " + suits[suit]; 
}

无效值和null可用于指示某种不符合数据集其余部分规则的外围数据。在这种情况下,除了笑话者之外,所有牌都有套装,因此suit的无效值表示这一点。使用null是如何对非原始变量执行此操作的,例如如果int suit代替String suit

答案 2 :(得分:0)

你可以创建一个标志,说明这张卡是小丑还是让小丑成为新套装。然后你需要在你的一些函数中检查这种情况,比如toString()。

您还可以扩展Card类以创建一个新的JokerCard,它拥有自己对这些功能的实现。因为JokerCard属于Card类型,你仍然可以将它们与其他卡片放在一个阵列中。