//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,问题就不会发生,但这并不是最佳选择,因为超高功率武器可以起到与起始武器一样小的伤害。
如果你们可以找到一个可以修复我的代码的解决方案,甚至可以用一种完全不同的方式来处理随机选择整数范围内的数字,我将非常感激。
答案 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。