根据索引查找卡片

Find a card based on index

我有 3 个字段,我使用枚举 Rank 和 Suit 来表示我的牌的等级和花色 class。我还有一个 cardIndex 字段,它应该代表一副 52 张卡片中的卡片索引。我可以使用枚举定义一张卡片 class 但我想知道是否有办法获得排名只给出卡片索引时卡片的花色?因为我想创建一个只获取卡片索引然后从那里设置等级和花色的构造函数..

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

public Card(int cardIndex)
{

}
我猜

4 suits/13 排名。如果 cardindices 先计算等级然后计算花色(指数 = 13 是花色 1 的最高等级),这在这里会起作用。这样您就可以从 cardindex 中检索 suitindex/rankindex。是否转换为 rank/suit 由您决定。

public Suit getSuit(int cardIndex){
     int suitNo = cardIndex/13;

     return matchingSuit(suitNo);
}

public Rank getRank(int cardIndex){
     int rankNo = cardIndex % 13;

     return matchingRank(rankNo);
}

如果卡片索引在 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];
}

试试这个。

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