卡构造函数

时间:2013-04-05 02:37:40

标签: java constructor

我对如何正确使用这门课感到困惑。我不知道如何使用所有这些混合值创建一个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;
}

2 个答案:

答案 0 :(得分:0)

也许你想要下面的内容?

cards.add(new Card(suit,rank,deck));

即使用适当的成员创建一个新的Card对象,然后将其添加到数组列表中。

答案 1 :(得分:0)

重新开始。什么是Card?它是一个具有等级和套装的对象。所以你需要:

  1. enum名为Suit。
  2. 排名的一系列数字。可能是2到14(10,杰克,女王,国王,王牌)。
    • 或者枚举:两个,三个,......,ACE。这可能有点多了。
  3. 具有诉讼和等级的班级Card
  4. 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;
        }
    }
    

    这里有各种各样的设计决定。

    1. Rank也应该是一个枚举?它使for循环更容易。
    2. 构建套牌应该是Deck类的内部吗?假设您不仅要处理扑克和桥牌,还要处理pinochle或bezique,每件套装中都有2个Ace-9。
    3. 是否应该将加密与加密质量的RNG联系起来?
    4. 您应该使用Stack还是Deque而不是ArrayListStack可能更清晰,而Deque s则无法改组。
    5. 您知道卡片正面朝上或朝下。这是一个补充。玩纸牌游戏?
    6. 如果牌组是空的,deal该做什么?这是使用堆栈的一个很好的理由。