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

问题描述

| 已经有一个名为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];
}
    

解决方法

在第二个构造函数中,您从
1
迭代到
DECK_SIZE
1..52
),但是您应该从
0
开始迭代:
    for(int i=0; i<DECK_SIZE;i++){
        this.cards[i]= other.cards[i];
    }
您的代码应抛出
ArrayIndexOutOfBoundsException
。     ,您的for循环,
for(int i=1;i<=DECK_SIZE;i++){
不正确,应该阅读
for(int i=0;i <DECK_SIZE;i++){
大小为52的数组的索引从0到51。     ,Java教程提供了一个使用Enum值创建卡片组的好方法示例: http://download.oracle.com/javase/1.5.0/docs/guide/language/enums.html 用Java编写数组的常规方法是
for (int i = 0; i < XXX; i++)
。您应该将Suit循环更改为
<4
而不是
<=3
,并且Deck在第二个构造函数中的外观为
for (int i = 0; i < DECK_SIZE; i++)
。长度为n的数组从索引0开始,到索引n-1结束。 卡组中的卡数不能少于52张吗?在这种情况下,您的第二个构造函数可能会抛出某种异常。因为它会给出
ArrayIndexOutOfBoundsException
。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...