Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.IllegalArgumentException:n在deck类中必须为正_Java - Fatal编程技术网

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

java.lang.IllegalArgumentException:n在deck类中必须为正,java,Java,我在做一个纸牌游戏,我得到一个错误,n必须是正的。我做了一些研究,这意味着(cards.size)等于或小于0,我相信,但我不明白如何使我的代码工作,一定是出了问题 代码: 错误消息: java.util.Random.nextInt(Unknown Source) at Cards.Deck.PlayerCardDraw(Deck.java:21) line 21 is int index = generator.nextInt (cards.size ()); 编辑:我做了Nankumar

我在做一个纸牌游戏,我得到一个错误,n必须是正的。我做了一些研究,这意味着(cards.size)等于或小于0,我相信,但我不明白如何使我的代码工作,一定是出了问题

代码:

错误消息:

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++;                   
    }
for(int i=0;i<4;i++)
{
C=deck.P1CardDraw();
卡片[cardNum]。绘制(i*75+100400);//错误行
cardNum++;
}
我的P1CardDraw()类

public ArrayListp1Hand;
公共阵列列表P1CardDraw()
{
p1Hand=新阵列列表<>();
p1Hand.add(PlayerCardDraw());
回手;
}

甚至在将卡片添加到列表之前,您可能正在调用
PlayerCardDraw
方法。表示
cards.size()
必须返回一个
0
。因此,使用
种子生成随机整数是非法的。这就是错误所在

参考

甚至在将卡片添加到列表之前,您可能正在调用
玩家卡片绘制
方法。表示
cards.size()
必须返回一个
0
。因此,使用
种子生成随机整数是非法的。这就是错误所在

参考

我猜你给PlayerCardDraw打了52次电话。 每次都会从牌组中移除一张牌,因此在53:d时间,您尝试从空牌组(即大小为0的牌组)中抽取一张牌,这会导致
generator.nextInt(cards.size())
以引发异常

然而,这并不容易说。
当您遇到类似问题并需要帮助时,始终显示异常的完整堆栈跟踪。此外,由于我们无法在stackoverflow上的代码中看到行号,请确保在代码中明确指出异常发生的行号。

我猜您一直在调用PlayerCardDraw超过52次。 每次都会从牌组中移除一张牌,因此在53:d时间,您尝试从空牌组(即大小为0的牌组)中抽取一张牌,这会导致
generator.nextInt(cards.size())
以引发异常

然而,这并不容易说。
当您遇到类似问题并需要帮助时,始终显示异常的完整堆栈跟踪。此外,由于我们无法在stackoverflow上的代码中看到行号,请确保在代码中准确地指出异常发生的行。

仔细查看您的
甲板
类,您已经在构造函数中初始化了
卡片
,因此不应该存在此类异常(因为卡片大小为52)

但是有一件事是可能得到一个例外,那就是
卡被声明为公共的
,并且
您可能已经在类外直接修改了它
。因此,arraylist
cards
的大小为0,并且您的方法将获得IllegalArgumentException异常

使
卡成为私有卡

若您已取出所有卡,则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;
    }
}

看看你的
Deck
类,你已经在构造函数中初始化了
cards
,所以不应该有这样的异常(因为cards的大小是52)

但是有一件事是可能得到一个例外,那就是
卡被声明为公共的
,并且
您可能已经在类外直接修改了它
。因此,arraylist
cards
的大小为0,并且您的方法将获得IllegalArgumentException异常

使
卡成为私有卡

若您已取出所有卡,则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;
    }
}

它给你的错误在哪里?可以发布错误消息/堆栈跟踪吗?cards=new ArrayList();应该是ArrayList();我猜。@Adio那是类型推断,它在java7中可以工作,但是PlayerCardDraw()
被调用的次数太多,清空
卡,并导致
0
被发送到
nextInt()
。它在哪里给您带来错误?可以发布错误消息/堆栈跟踪吗?cards=new ArrayList();应该是ArrayList();我猜。@Adio那是类型推断,它在java7中可以工作,但是PlayerCardDraw()
被调用的次数太多,清空
卡片
,导致
0
被发送到
nextInt()
。我也这么想,但他需要通过初始化数组的甲板构造函数。我也这么想,但是他需要通过初始化数组的Deck构造函数。我找到了应该发生的地方,编辑了我的问题,并在那里发布了代码。它正在运行一个只运行4次的for语句,应该重置为53,而不是4,对吗?我找到了应该发生的地方,编辑了我的问题,并在那里发布了代码。它正在运行一个只运行4次的for语句,它应该重置为53,而不是4,对吗?这修复了我遇到的错误,但现在仍然返回null;正在尝试修复它。@HaydenHolligan我建议您在
playerCardDraw()
method,jus中添加一条打印语句
public ArrayList < Card > p1Hand;
public ArrayList < Card > P1CardDraw ()
{

    p1Hand = new ArrayList < > ();
    p1Hand.add (PlayerCardDraw ());
    return p1Hand;
}
public Card PlayerCardDraw ()
{
    Random generator = new Random ();
    if(cards.size() > 0) {
        int index = generator.nextInt (cards.size());
        return cards.remove (index);
    } else {
        return null;
    }
}