如果我要制作一副牌,如果我希望我的回归成为我班级的对象,我如何将其作为ArrayList进行混洗?

时间:2015-12-06 00:08:01

标签: java arraylist

我正在尝试创建一种方法来创建一副牌并将其洗牌。我希望我的回归是我班上的一个对象,但我也希望我的卡片组成为一个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时,我可以调用此方法来创建一个。我如何修复我的代码来执行此操作?

1 个答案:

答案 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;