我有3个字段,我使用枚举Rank和Suit来表示我的卡类的等级和套装。我还有一个cardIndex字段,该字段应该代表52的卡片中的卡片索引。我能够使用枚举来定义卡片类,但我想知道是否有办法获得等级和套装卡只给卡指数?因为我想创建一个只接受卡片索引然后从那里设置等级和套装的构造函数。
private final Suit suit;
private final Rank rank;
private final int cardIndex;
public Card(int cardIndex)
{
}
答案 0 :(得分:2)
试试这个。
private final String suit;
private final int rank;
private final int cardIndex;
public Card(int cardIndex)
{
if(cardIndex>13){
int a = cardIndex/13;
int b = (a*13)-cardIndex;
suit = getSuit(a);
rank = b;
}else{
suit = getSuit(0);
rank = cardIndex;
}
}
public String getSuit(int s)
{
String suit;
switch(s){
case 1:
suit = "Spade";
break;
case 2:
suit = "Heart";
break;
case 3:
suit = "Club";
break;
case 4:
suit = "Diamond";
break;
return suit;
}
}
答案 1 :(得分:1)
public Suit getSuit(int cardIndex){
int suitNo = cardIndex/13;
return matchingSuit(suitNo);
}
public Rank getRank(int cardIndex){
int rankNo = cardIndex % 13;
return matchingRank(rankNo);
}
答案 2 :(得分:1)
如果卡片索引在0到51之间(或者1和52,取决于你想怎么做),那么你可能只有0-12代表黑桃,13-25代表钻石等等。然后只是以索引为模,得到等级,除以13得到卡的套装。
如果你有一个包含所有等级(2-Ace)和套装(0-3)的最终数组,那么你可以只查看从给定的指数中得到匹配的等级和套装
final int[] ranks = {2,3,4,5,6,7,8,9,10,11,12,13,14}; //2-Ace
final int[] suits = {0,1,2,3}; //spades-hearts
private int rank;
private int suit;
public Card(int index) {
rank = ranks[index % 13];
suit = suits[index / 13];
}