使用循环创建一组实例

时间:2014-02-11 22:03:51

标签: java

我正在尝试创建一副牌,从而创建了52个类的实例,允许我指定卡号和套装。例如,Card(2,“Clubs”)将实例化一张价值为2的牌和诉讼俱乐部。

我使用以下代码循环进程并存储在数组中,而不是输入52次。它有效,但试图看看我能否做得更好。对于如此多的if / else编码,它看起来相当糟糕。试图将套装存放在枚举中,但我无法称之为。它似乎与String不匹配。

此外,这种方法意味着当我来到照片卡片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++; 
      }
 }

5 个答案:

答案 0 :(得分: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 :(得分: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++;
    }
}

答案 2 :(得分: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

答案 3 :(得分: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);
}

答案 4 :(得分:0)

缓慢的方式:)

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