用Java编写扑克游戏的构造函数

时间:2011-04-14 00:13:20

标签: java arrays poker

已经有一个名为Card.java的类,有52张牌。在Deck.java中,我必须编写一个构造函数来初始化带有套件和值的52张卡。我写了下面的代码,但它没有通过公开测试。可以帮助我吗?

public class Deck {
    private Card[] cards;
    private final int DECK_SIZE=52;

    public Deck(){
        this.cards=new Card[DECK_SIZE];
        int index = 0;
        for (int suit = 0; suit <= 3; suit++) {
            for (int value = 1; value <= 13; value++) {
                this.cards[index] = new Card (suit, value);
                index++;
            }
        }
    }
    public Deck(Deck other) {
        this.cards= new Card[DECK_SIZE];
        for(int i=1;i<=DECK_SIZE;i++){
            this.cards[i]= other.cards[i];
}

3 个答案:

答案 0 :(得分:1)

在第二个构造函数中,您从1迭代到DECK_SIZE1..52),但您应该从0开始迭代:

    for(int i=0; i<DECK_SIZE;i++){
        this.cards[i]= other.cards[i];
    }

您的代码应该抛出ArrayIndexOutOfBoundsException

答案 1 :(得分:0)

你的for循环,

for(int i=1;i<=DECK_SIZE;i++){

不正确,应该阅读

for(int i=0;i <DECK_SIZE;i++){

大小为52的数组只有0到51之间的索引。

答案 2 :(得分:0)

Java教程提供了一个使用Enum值创建套牌的方法的好例子: http://download.oracle.com/javase/1.5.0/docs/guide/language/enums.html

在java中执行数组的传统方法是for (int i = 0; i < XXX; i++)。您应该更改您的套装循环,然后更改为<4而不是<=3,并且您的Deck会在第二个构造函数中查找for (int i = 0; i < DECK_SIZE; i++)。长度为n的数组从索引0开始,在索引n-1处结束。

牌组的牌数少于52张吗?在这种情况下,你的第二个构造函数可能抛出某种异常;因为它会给出ArrayIndexOutOfBoundsException