我正在尝试创建一个方法来创建一副牌并对其进行洗牌。我希望我的return是类中的对象,但我也希望我的一副牌是ArrayList,我不确定如何做到这一点。
到目前为止,我的方法是:
public static Cards makeFullDeck(){
ArrayList<Card> temp = ArrayList<Card>();
Cards deck = new Cards();
for(Suit s: Suit.values()){
for(Value v: Value.values()){
deck.add(new Card(s,v));
}
}
Collections.shuffle(temp);
return deck;
}
add方法只是将一张卡片添加到卡片堆的底部,而Cards就是我的类。我希望该方法返回类的对象,但也希望它应用于数组列表,这样当我在另一个类中创建数组列表时,我可以调用该方法来创建一个数组列表。我该如何修复我的代码才能做到这一点?
在这种情况下,最好将shuffle()
方法添加到Cards
类中,只需打乱其内部列表:
class Cards {
private List<Card> cards = new ArrayList<>();
public void shuffle() {
Collections.shuffle(this.cards);
}
// All other code omitted for obvious reasons.
}
然后在您的方法中调用:
deck.shuffle();
return deck;
另一种(但可能较差)解决方案是先将Card
对象添加到临时列表中,然后打乱该列表,然后将卡添加到Cards
:
// Create temporary list with all cards.
List<Card> tmpList = new ArrayList<>();
for(Suit s: Suit.values()){
for(Value v: Value.values()){
tmpList.add(new Card(s,v));
}
}
// Shuffle the cards.
Collections.shuffle(tmpList);
// Now stick them in the deck.
Cards deck = new Cards();
for (Card c : tmpList) {
deck.add(c);
}
return deck;