我有一个工作方便的构造函数,但我觉得它的代码太多了。我不确定如何简化它,但我将不胜感激任何帮助!
public Hand(Card c1, Card c2, Card c3, Card c4, Card c5, Card c6) {
this();
this.card1 = c1;
this.card2 = c2;
this.card3 = c3;
this.card4 = c4;
this.card5 = c5;
this.card6 = c6;
if (c1 != null && c2 != null && c3 != null && c4 != null && c5 != null && c6 != null) {
for (int count = 0; count < 6; count++) {
if (count == 0) {
cardsInHand.add(c1);
} else if (count == 1) {
cardsInHand.add(c2);
} else if (count == 2) {
cardsInHand.add(c3);
} else if (count == 3) {
cardsInHand.add(c4);
} else if (count == 4) {
cardsInHand.add(c5);
} else if (count == 5) {
cardsInHand.add(c6);
}
}
}
}
编辑:清除代码并提供以下建议。该程序仍然使用以下代码运行:
public Hand(Card c1, Card c2, Card c3, Card c4, Card c5, Card c6) {
this();
this.card1 = c1;
this.card2 = c2;
this.card3 = c3;
this.card4 = c4;
this.card5 = c5;
this.card6 = c6;
cardsInHand.add(c1);
cardsInHand.add(c2);
cardsInHand.add(c3);
cardsInHand.add(c4);
cardsInHand.add(c5);
cardsInHand.add(c6);
答案 0 :(得分:1)
for循环是多余的,因为它将按此顺序添加
cardsInHand.add(c1);
cardsInHand.add(c2);
//etc
会做同样的事情。
您还可以考虑使用var args构造函数:
public Hand(Card ... cards){
this.card1=cards[0];
//etc
答案 1 :(得分:1)
您的for
循环既不必要又容易混淆。你正在做的是将每张卡添加到列表中,它所属的顺序是自然而不是强制 - 除非你明确输入不是第一个参数的卡,然后你赢了不按规定进入。
并不是真的应该重要。一手牌更像是一个跳过列表,其中插入顺序很少。
此外,由于您声称有一张卡片的支持列表,因此您的字段也很少。让我们摆脱这些,只需将值直接添加到列表中。
我将使用varargs构造函数 - 这样,在初始化时,您不必总是只添加五张卡片。
public Hand(Card... cards) {
for(Card c: cards) {
if(c != null) { // if you want to be really careful...
cardsInHand.add(c);
}
}
}