我的任务是写一个二十一点游戏,我创建了一个卡片类,它有一个带有值的int变量和一个带有卡片颜色的字符串(心脏,棍棒,钻石和铁锹)。我用一个类“deck”组织卡片,其中包含所有52张卡片的ArrayList。当我想要发卡时,我使用以下代码:
public Card give(){
Card d = c.get(0); //c is the Arraylist
c.remove(0);
return d;
}
由于我必须使用6个套牌,我创建了另一个名为playdeck的类,它有一个包含6个“deck”对象的Array。在这里,我只是使用此代码获取卡片:
class playdeck{enter code here
static int x = 0;
static int y = 0;
static deck[] play = new deck[6];
public playdeck(){
play[0] = new deck();
play[1] = new deck();
play[2] = new deck();
play[3] = new deck();
play[4] = new deck();
play[5] = new deck();
}
public static Card give(){
y++;
if(y == 53){
y = 0;
x++;
}
Card d = play[x].give();
return d;}
前两个套牌的一切正常,但是一旦程序尝试进入第三个套牌对象并获得一张牌,就会出现以下错误:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 0 out-of-bounds for length 0 at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)
at java.base/java.util.Objects.checkIndex(Objects.java:372)
at java.base/java.util.ArrayList.get(ArrayList.java:439)
at deck.give(deck.java:39)
at playdeck.give(playdeck.java:23)
at Blackjack.main(Blackjack.java:5)
当我尝试访问第三个“套牌”对象时,一切正常,以及所有其他“套牌”对象,但是当我试图发出超过2包卡时,程序崩溃了。有没有人知道为什么会这样?这是我的主要方法btw:
public static void main (String[] args){
playdeck blackjack = new playdeck();
for (int x = 0; x < 312; x++){
System.out.println(blackjack.give().name);
}}
答案 0 :(得分:0)
您是否确定每次需要时都需要从ArrayList
删除卡?因为您可以执行以下操作:
static int i = 0;
public Card give() {
return c.get(i++);
}
即使需要从ArrayList
删除对象,也请替换
public Card give(){
Card d = c.get(0); //c is the Arraylist
c.remove(0);
return d;
}
带
public Card give(){
return c.remove(0);
}
此处的说明:ArrayList remove docs
错误在这里:
public static Card give(){
y++;
if(y == 53){
y = 0;
x++;
}
Card d = play[x].give();
return d;
}
因为你只能正确处理第一副牌,而忘记其他牌。此代码将解决您的问题:
static int i = 0;
public static Card give() {
i++;
y = i % 52; //0-51
x = i / 52; //0-5
return play[x].give();
}