2013-11-02 5 views
-1

У меня есть рабочий конструктор удобства, но я чувствую, что это слишком много кода. Я не уверен, как это упростить, но я был бы признателен за любую помощь!Упрощение конструктора удобства

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

EDIT: Убрал код с предложением ниже. Программа по-прежнему работает со следующим кодом:

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

Можете ли вы использовать массивы вместо отдельных переменных? – vandale

+0

cardsInHand мой arraylist – user2947058

+0

Почему у вас есть шесть переменных карт? просто создайте другого массива для его хранения. –

ответ

1

цикл является излишним, поскольку это получит добавленным в таком порядке, чтобы

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

будет делать то же самое.

Вы также могли бы рассмотреть возможность использования конструктора вара ARGS:

public Hand(Card ... cards){ 
    this.card1=cards[0]; 
    //etc 
+0

Я исключил цикл и использовал картыInHand.add (c1) и т. Д. Спасибо! Это очистило его, и оно все еще работает. – user2947058

1

Вашего for цикл ненужный и запутанный в то же время. То, что вы делаете, заключается в добавлении каждой карты в список, и порядок, в который он попадает, является естественным, а не принудительным - если вы явно не ввели карточку, которая не является первым параметром, то вы не будете вводить их вышел из строя.

Не важно, чтобы это было важно. Рука карт больше похожа на список пропусков, где порядок вставки имеет мало значения.

Кроме того, поскольку вы утверждаете, что у вас есть резервный список для ваших карт, ваши поля тоже мало. Давайте также избавимся от них, и просто добавим значения непосредственно в список.

Я собираюсь использовать конструктор varargs - таким образом, вы не всегда должны добавлять только пять карт к вашей руке при инициализации.

public Hand(Card... cards) { 
    for(Card c: cards) { 
     if(c != null) { // if you want to be really careful... 
      cardsInHand.add(c); 
     } 
    } 
} 
Смежные вопросы