2013-11-02 76 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>())); 

} 

或者你需要做其他。