问题描述
|
已经有一个名为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
。