0

我有一个工作方便的构造函数,但我觉得它的代码太多了。我不知道如何简化它,但我会很感激任何帮助!

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);
4

2 回答 2

1

for 循环是多余的,因为它将按该顺序添加,因此

cardsInHand.add(c1);
cardsInHand.add(c2);
//etc

会做同样的事情。

您还可以考虑使用 var args 构造函数:

public Hand(Card ... cards){
   this.card1=cards[0];
   //etc
于 2013-11-02T04:16:30.203 回答
1

您的for循环既不必要又令人困惑。您正在做的是将每张卡片添加到列表中,并且它的顺序是自然的而不是强制的 - 除非您明确输入不是第一个参数的卡片,否则您不会将它们输入命令。

这并不重要,真的。一手牌更像是一个跳过列表,其中插入顺序无关紧要。

此外,由于您声称您的卡片有一个支持列表,因此您的字段也没什么意义。让我们也摆脱这些,直接将值添加到列表中。

我将使用可变参数构造函数——这样,你不必总是在初始化时只添加五张牌。

public Hand(Card... cards) {
    for(Card c: cards) {
        if(c != null) { // if you want to be really careful...
            cardsInHand.add(c);
        }
    }
}
于 2013-11-02T04:20:11.377 回答