IllegalArgumentException:使用Random.nextInt()方法

时间:2017-08-11 20:32:02

标签: java random integer

//in a method that checks players equipment to change damage and armor values
    //none of these min/max values should spit out anything less than 0
        switch(weapon)
        {
            case"Knife": minDamage = 3; maxDamage = 12; break;
            case"Short Sword": minDamage = 6; maxDamage = 15; break;
            case"Long Sword": minDamage = 8; maxDamage = 20; break;
            case"Battle Axe": minDamage = 14; maxDamage = 28; break;
            case"Death's Blade": minDamage = 20;maxDamage = 60; break;
        }
        //armor

        switch(armor)
        {
            case"Rags": playerArmor = 0; break;
            case"Hide Armor": playerArmor = 5; break;
            case"Leather Armor": playerArmor = 8; break;
            case"Chainmail": playerArmor = 12; break;
            case"Platemail": playerArmor = 20; break;
            case"Death's Armor": playerArmor = 50; break;
        }


        //in a method that handles the combat
        //The problem is somewhere in the logic for the damageDealt integer.
        int damageDealt = rand.nextInt(maxDamage - minDamage + 1)+minDamage;
        int damageTaken = rand.nextInt(enemyDamage - playerArmor);
        if(damageDealt >= 0)
        {
                enemyHealth -=damageDealt;
        }
        else
        {
                damageDealt = 0;
        }
        if(damageTaken>0)
        {
                playerHealth -=damageTaken;
        }
        else
        {
                damageTaken = 0;    
        }

所以这只是我完成文字冒险的几行代码。有时我会得到这个弹出错误的错误:IllegalArgumentException:在战斗期间,对于java的random()方法,绑定必须是正面的。

第一个代码模糊是处理玩家库存的方法的一部分。请注意,武器的每个最大值都应大于相应的最小值。第二个代码模糊是战斗方法的一部分。当玩家选择攻击时,这些线路会被运行。就我所知,damageDealt整数似乎是个问题。

我非常肯定

int damageDealt = rand.nextInt(maxDamage - minDamage + 1)+minDamage;

应该工作,永远不会给minDamage值以下的整数值,或者甚至为零。但是,由于某种原因,它有时候会发生这种情况,并且游戏会出现错误并给出错误代码。

如果我只使用maxDamage,问题就不会发生,但这并不是最佳选择,因为超高功率武器可以起到与起始武器一样小的伤害。

如果你们可以找到一个可以修复我的代码的解决方案,甚至可以用一种完全不同的方式来处理随机选择整数范围内的数字,我将非常感激。

2 个答案:

答案 0 :(得分:0)

您的问题是传递给rant.nextInt(int bound)方法的值。 正如javadoc所说,这种方法

  
    

返回一个伪随机,均匀分布的int值,介于0(含)和指定值(不包括)之外......

  

  
    

抛出:IllegalArgumentException - 如果绑定不是肯定的

  

所以,你应该传递绑定值> 0

答案 1 :(得分:0)

以下行可能是您错误的来源: int damageTaken = rand.nextInt(enemyDamage - playerArmor);

Random.nextInt()只返回介于0(含)和传入(独占)参数之间的值。因此,如果enemyDamage - playerArmor解析为负值,则nextInt()将抛出IllegalArgumentException。