我正在尝试创建一副牌,从而创建了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++;
}
}
答案 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);
}
}