0

我对 52 张非小丑牌使用了以下代码

/**
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

我怎么能把两个小丑加进去?

4

3 回答 3

4

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

另一种方法是拥有一面旗帜isJoker,并true为 Jokers 制作它。isJoker在这种情况下,如果is ,您需要覆盖一些行为(如 toString)true

在其他语言中,表示卡片的经典方法是将其存储为单个整数 0-51。军衔是value%13,西装是value/13。在这个表示中,小丑是 52 和 53,可以用 来检查if(value > 51)

使用任何可以为您提供最简单的卡片实现的方式,它们之间没有太大区别。

于 2013-06-14T19:31:09.477 回答
0

由于小丑没有西装,你可以让suit是一个无效的值,比如 -1,然后在你的代码中检查它:

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

无效值,null可用于指示某种不符合其余数据集规则的异常数据。在这种情况下,除了百搭牌之外,所有牌都有花色,因此无效的值suit将表明这一点。Usingnull是你如何对非原始变量执行此操作,例如,如果int suitString suit

于 2013-06-14T19:30:23.070 回答
0

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

您还可以扩展 Card 类来创建一个新的 JokerCard,它拥有自己的这些功能的实现。因为 JokerCard 将是 Card 类型,您仍然可以将它们与其余卡片放在一个数组中。

于 2013-06-14T19:34:35.640 回答