我正在进行纸牌游戏而且我得到的错误是肯定是肯定的。我做了一些研究,这意味着(cards.size)等于或小于0我相信,但我不明白如何让我的代码工作,一定是错的。
代码:
public class Deck
{
public ArrayList <Card> cards;
Deck()
{
cards = new ArrayList<>();
for (int a = 0; a < 52; a++)
{
cards.add(new Card(a));
}
}
public Card PlayerCardDraw ()
{
Random generator = new Random ();
int index = generator.nextInt (cards.size ());
return cards.remove (index);
}
如何修复数组列表,以免出现此错误?它与卡有关,所以我也会发布那些代码,我知道卡片课程中有些东西不对,但我不知道这是不是问题。
public class Card
{
int c = 52;
int cardpath[] = new int[c];
Card ()
{
}
public Card(int c)
{
this.c = c;
}
public int getCardPath()
{
return cardpath[c];
}
}
错误讯息:
java.util.Random.nextInt(Unknown Source) at Cards.Deck.PlayerCardDraw(Deck.java:21)
line 21 is int index = generator.nextInt (cards.size ());
编辑:我做了Nankumar Tekale所说的,它说的是你们所预测的:它吸引了超过52张牌。我不明白的是错误突然出现在
for (int i = 0 ; i < 4 ; i++)
{
C = deck.P1CardDraw ();
card [cardNum].draw (i*75+100, 400); //Error line
cardNum++;
}
我的P1CardDraw()类
public ArrayList < Card > p1Hand;
public ArrayList < Card > P1CardDraw ()
{
p1Hand = new ArrayList < > ();
p1Hand.add (PlayerCardDraw ());
return p1Hand;
}
答案 0 :(得分:1)
好好看看你的Deck
类,你已经在构造函数中初始化cards
所以不应该有这样的例外(因为卡片大小为52)。
但有一件事可能会产生cards is declared public
和you may have modified it outside class directly
的异常。因此,arraylist cards
的大小为0,您的方法Random.nextInt(int)
会出现IllegalArgumentException异常。
将cards
设为私有。
如果您撤回了所有卡片,那么arraylist的大小将变为0,这可能会导致异常。将检查0添加为:
public Card PlayerCardDraw ()
{
Random generator = new Random ();
if(cards.size() > 0) {
int index = generator.nextInt (cards.size());
return cards.remove (index);
} else {
return null;
}
}
答案 1 :(得分:0)
即使在将卡添加到列表之前,您也可能正在调用PlayerCardDraw
方法。方法cards.size()
必须返回zero
。因此使用illegal
种子生成随机int是zero
。因此是错误。
请参阅:
的 Random.nextInt( n ) 强>
答案 2 :(得分:0)
我的猜测是你继续调用PlayerCardDraw超过52次。
每次都会从牌组中移除一张牌,所以53:d时间,你试图从空牌组(即大小为0的牌组)中抽出牌,这会导致generator.nextInt(cards.size());
抛出异常。
然而,这并不容易说。 当您遇到类似问题并需要帮助时,始终显示异常的完整堆栈跟踪。此外,由于我们无法在stackoverflow上的代码中看到行号,因此请确保在代码中指示,确切地说明异常发生在哪一行。