2013-11-02 54 views
0

我已經使ArrayList(「手」)的ArrayList(「手的列表」),但不是很優雅的方式。我期待1-4手和我想出了這個想法:Java中的ArrayLists的ArrayList - 縮短代碼

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在一個getter,但讓我們把這個問題放在一邊,現在是個好主意。

那麼做到這一點:

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

} 

或者你需要做其他。