2015-04-13 79 views
0

我有3個字段,我使用枚舉Rank和Suit來表示我的卡片級別和套裝。我也有一個cardIndex字段,它應該代表52張牌組中的卡片索引。我可以使用枚舉定義一個卡片類,但我想知道是否有辦法獲得卡片的等級和套裝卡只給予卡片索引時?當我想創造一個構造函數,只花了上證指數,然後設置的點數和花色,從那裏..根據索引查找卡

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

public Card(int cardIndex) 
{ 

} 
+0

但是這不會導致__DECK__在每次運行中都有相同的卡片序列!!!! –

回答

1

4套/ 13的行列我猜。如果cardindices首先計算出隊伍,然後再進行套裝(指數= 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); 
} 
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]; 
} 
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; 
    } 
}