我对如何正确使用这门课感到困惑。我不知道如何使用所有这些混合值创建一个ArrayList ...任何帮助将不胜感激。
public StandardCardImpl(Suit suit, int rank, StandardCardImpl deck) {
face_up = false;
List<Card> cards = new ArrayList<Card>(DeckSize);
cards.add(suit,rank,deck);
if (rank < 1 || rank > KING) {
throw new RuntimeException("Rank is out of range for standard card");
}
Iterator iterator = cards.iterator();
this.suit = suit;
this.rank = rank;
this.deck = deck;
}
答案 0 :(得分:0)
也许你想要下面的内容?
cards.add(new Card(suit,rank,deck));
即使用适当的成员创建一个新的Card
对象,然后将其添加到数组列表中。
答案 1 :(得分:0)
重新开始。什么是Card
?它是一个具有等级和套装的对象。所以你需要:
enum
名为Suit。Card
。 Card
不应该有制定者,因为你不希望玩家在有牌时更换牌。所以,
public class Card {
private final Suit suit;
private final int rank;
public Card(final Suit suit, final int rank) {
this.suit = suit;
this.rank = rank;
}
// Getters, toString, equals, hashCode, formatting for humans, etc.
}
现在,您需要构建一个套牌。套牌应包含一张牌列表,您必须能够将其洗牌。你可以把它变成ArrayList<Card>
,但我会把它变成一个包含这样一个列表的对象,因为甲板有行为。 deck.deal()
比内联deal
更清楚。
public class Deck {
private List<Card> cards = new ArrayList<>();
public Deck() {
for (Suit suit: Suit.values()) {
for (int rank = 2; rank <= ACE; rank ++) {
cards.add(new Card(suit, rank));
}
}
Collections.shuffle(cards); // Perhaps use your own Random too.
}
public synchronized Card deal() {
Card dealt = cards.get(0);
cards.remove(0);
return dealt;
}
}
这里有各种各样的设计决定。
Deck
类的内部吗?假设您不仅要处理扑克和桥牌,还要处理pinochle或bezique,每件套装中都有2个Ace-9。Stack
还是Deque
而不是ArrayList
? Stack
可能更清晰,而Deque
s则无法改组。deal
该做什么?这是使用堆栈的一个很好的理由。