java.lang.IllegalArgumentException:在deck类中,n必须为正数

时间:2013-01-22 15:06:31

标签: java

我正在进行纸牌游戏而且我得到的错误是肯定是肯定的。我做了一些研究,这意味着(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;
}

3 个答案:

答案 0 :(得分:1)

好好看看你的Deck类,你已经在构造函数中初始化cards所以不应该有这样的例外(因为卡片大小为52)。

但有一件事可能会产生cards is declared publicyou 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上的代码中看到行号,因此请确保在代码中指示,确切地说明异常发生在哪一行。