根据索引查找卡片

时间:2015-04-13 00:53:15

标签: java enums

我有3个字段,我使用枚举Rank和Suit来表示我的卡类的等级和套装。我还有一个cardIndex字段,该字段应该代表52的卡片中的卡片索引。我能够使用枚举来定义卡片类,但我想知道是否有办法获得等级和套装卡只给卡指数?因为我想创建一个只接受卡片索引然后从那里设置等级和套装的构造函数。

private final Suit suit;
private final Rank rank;
private final int cardIndex;

public Card(int cardIndex)
{

}

3 个答案:

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

我估计有4个西装/ 13个排名。如果卡片指示首先计入等级然后是套装(索引= 13是套装1的最高等级),则此处可行。这样您就可以从cardindex中检索suitindex / rankindex。排名/诉讼的转换由您决定。

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];
}