我正在尝试创建一种方法来创建一副牌并将其洗牌。我希望我的回归是我班上的一个对象,但我也希望我的卡片组成为一个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方法只是在堆的底部添加一张卡片,而卡片是我的班级。我希望方法返回类的对象,但我也希望它应用于arraylists,所以当我在另一个类中创建一个arraylist时,我可以调用此方法来创建一个。我如何修复我的代码来执行此操作?
答案 0 :(得分:-1)
在这种情况下,最好将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;