如果我正在制作一副纸牌,如果我希望我的返回成为我类的对象,我该如何将其洗牌为 ArrayList?



我正在尝试创建一个方法来创建一副牌并对其进行洗牌。我希望我的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;

相关内容

最新更新