2014-02-11 67 views
0

我正在尝试创建一副牌,从而创建一个允许指定卡号和套装的类的52个实例。例如,卡片(2,“俱乐部”)将实例化具有值2和套装俱乐部的卡片。使用循环创建一组实例

我正在使用以下代码来循环进程并将其存储在数组中,而不是将其输出52次。它的工作原理,但试图看看我能否做得更好。这么多if/else编码看起来相当糟糕。试图存储在一个枚举的诉讼,但我无法称呼它。它似乎不匹配一个字符串。

此外,这种方法意味着当我来到图片卡Jack,Queen,King,Ace时,我会以更多的if/else结束。如果有更好的方法,请咨询。谢谢。

Card[] cards = new Card[52]; 

int i = 0; 
for(int x=0; x < 4; x++){ 
     for(int y=2; y < 15; y++){ 
      if(x == 0){ 
       cards[i] = new Card(y, "CLUBS"); 
      } 
      else if(x == 1){ 
       cards[i] = new Card(y, "DIAMONDS"); 
      } 
      else if(x == 2){ 
       cards[i] = new Card(y, "HEARTS"); 
      } 
      else{ 
       cards[i] = new Card(y, "SPADES"); 
      } 
      i++; 
     } 
} 

回答

3

使用的西装的一种List

List<String> suits = new ArrayList<String>(); 
suits.add("CLUBS"); 
suits.add("DIAMONDS"); 
suits.add("HEARTS"); 
suits.add("SPADES"); 

Card[] cards = new Card[52]; 
int i = 0; 
for (String suit : suits) { 
    for (int y = 2; y < 15; y++) { 
     cards[i] = new Card(y, suit); 
     i++; 
    } 
} 

你也可以考虑在一个枚举定义套装:

public enum Suit { 
    CLUBS, DIAMONDS, HEARTS, SPADES; 
} 

在这种情况下,你的循环将变为:

for (Suit suit : Suit.values()) { 
    for (int y = 2; y < 15; y++) { 
     cards[i] = new Card(y, suit.name()); 
     i++; 
    } 
} 
1

尝试使用java.util.Map<Integer, String>,它将类型索引映射到字符串类型。

final Map<Integer, String> types = new HashMap<Integer, String>(); 
types.put(0, "CLUBS"); 
types.put(1, "DIAMONDS"); 
// ... 

int i = 0; 
for(int x=0; x < 4; x++){ 
    for(int y=2; y < 15; y++){ 
     cards[i] = new Card(y, types.get(x)); 
     i++; 
    } 
} 
0

你总是可以设置了诉讼,这样的话,

for(int x=0; x < 4; x++) { 
    // Perhaps getSuit(x)? 
    String suit = "CLUBS"; 
    if (x == 1) suit = "DIAMONDS"; 
    else if (x == 2) suit = "HEARTS"; 
    else if (x == 3) suit = "SPADES"; 
    //-------------------- 

    for(int y=2; y < 15; y++) { 
    cards[i] = new Card(y, suit); 
    i++; 
    } 
} 

您也可能会在西装移动到enum

0

为了不使用多个循环,您可以执行以下操作

Card[] cards = new Card[52]; 
String type = ""; 
for(int i=0; i<52; i++) { 
    if (i<13) type = "CLUBS"; 
    else if (i<26) type = "DIAMONDS"; 
    else if (i<39) type = "HEARTS"; 
    else type = "SPADES"; 
    cards[i] = new Card(i%13, type); 
} 
0

慢的方式:)

for (String cardType: "CLUBS DIAMONDS HEARTS SPADES".split(" ")) { 
      for (int i = 2; i < 15; i++) { 
      cards[i] = new Card(i, cardType); 
     } 
    }