我使用以下代码购买了52张非Joker卡
/**
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?
答案 0 :(得分:4)
所以有几种简单的方法可以做到这一点。首先是创建一个新的套装,小丑,并忽略它的排名。这套新西装只有两张牌。如果西装是小丑,你可能想要覆盖等级以返回常数。
另一种方法是拥有一个标志isJoker
,并为其创建true
。在这种情况下,如果isJoker
为true
,您需要覆盖某些行为(例如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类型,你仍然可以将它们与其他卡片放在一个阵列中。