已经有一个名为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];
}
答案 0 :(得分:1)
在第二个构造函数中,您从1
迭代到DECK_SIZE
(1..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
。