2013-11-02 3 views
0

Я создал ArrayList («Список рук») из ArrayLists («Руки»), но не очень элегантным способом. Я ожидаю 1-4 рук, и я пришел с этой идеей:ArrayList of ArrayLists в Java - код сокращения

ArrayList<ArrayList<Card>> hands=new ArrayList<ArrayList<Card>>(); 
i=0; 
if(i<playersQuantity){ 
    ArrayList<Card> hand0=new ArrayList<Card>(); 
    hands.add(hand0); 
    i++; 
} 
if(i<playersQuantity){ 
    ArrayList<Card> hand1=new ArrayList<Card>(); 
    hands.add(hand1); 
    i++; 
} 
if(i<playersQuantity){ 
    ArrayList<Card> hand2=new ArrayList<Card>(); 
    hands.add(hand2); 
    i++; 
} 
if(i<playersQuantity){ 
    ArrayList<Card> hand3=new ArrayList<Card>(); 
    hands.add(hand3); 
} 

У вас есть идеи, как сократить этот код? Если бы я должен был ожидать 20, 100 или больше рук, таким образом, было бы весьма проблематично ...

ответ

2

Как насчет использования цикла, что-то вроде этого:

for (int i = 0; i < playersQuantity; i++) { 
    ArrayList<Card> hand = new ArrayList<Card>(); 
    hands.add(hand); 
} 
+0

Я ожидал конфликта имен объектов, но, похоже, он отлично работает ... – wojteo

+1

Имена в этом случае являются произвольными. Он сохраняет ссылки внутри объекта «руки». –

2

Я хотел бы предложить рафинирования объектную модель А бит путем создания Hand абстракции:

public class Hand { 
     List<Card> cards= new ArrayList<>(); 

     public Hand(List<Card> cards) { 
      this.cards = cards; 
     } 

     public List<Card> getCards() { 
      return cards; 
     } 

     public void setCards(List<Card> cards) { 
      this.cards = cards; 
     } 
} 

Примечание это не очень хорошая идея, чтобы выставить изменяемый объект, как этот ArrayList в поглотителе, но давайте этот вопрос в стороне на данный момент.

Тогда это сделать:

ArrayList<Hand> hands = new ArrayList<>(); 
for(int i = 0 ; i < playersQuantity ; i++) { 
    hands.add(new Hand(new ArrayList<Card>())); 

} 

Или, что еще нужно сделать.

Смежные вопросы