/**
* @return random damage from monster
* @param monster of class Monster
*/
public int getRandomDamage(Monster monster) {
int min = monster.getMinDamage(); //this is set to 20 for monsters
int max = monster.getMaxDamage(); //this is set to 30 for monsters
return randomGenerator.nextInt(max - min + 1) + min;
}
此返回语句不起作用,因为它总是返回整数20.任何解决的提示,它应该返回20(int min)和30(int max)之间的随机数。感谢任何帮助。
经过一些问题解决,结果发现getMaxDamage();返回20而不是30,现在运行良好,你输入错误是愚蠢的。
答案 0 :(得分:4)
发布的代码是 a valid and accepted approach(但是,请重复使用相同的PRNG ..)。
我能想到的行为最合理的解释是,值不预期的内容。例如,以下将始终产生20。
int min = 20;
int max = 20;
return randomGenerator.nextInt(max - min + 1) + min;
替换值会产生nextInt(1) + 20
,其中nextInt(1)
始终返回0,因为Random.nextInt(n)会返回[0,n)
范围内的整数。
其他一些原因......(调试是关于开发和测试假设)
也许,randomGenerator
不是 Random
并且是just broken。
class FairRandom {
public int nextInt(int n) {
return 0; /* chosen by fair dice roll */ }
}
}
或许,正确生成随机数 ,而“始终为20”的值来自其他地方。
或者,也许,在每次调用nextInt
之前,随机数生成器正在重新种子,并且你非常不幸种子导致20被“随机”选择。
或者,或许,你正在听@JasonC并且用我所有的假设来肆虐; - )
答案 1 :(得分:1)
您的随机数生成代码没问题。
您所看到的最合理的解释是getMaxDamage()
实际上返回的是20而不是30。
我建议添加一些临时打印输出来检查这些值,或者在调试器中运行它,以及检查getMaxDamage()
代码是否有错误。
其他解释包括非常不幸的中微子/宇宙射线的存在导致CPU寄存器中的位翻转,这恰好导致每次计算20次,或者也许是Intergalactic Council of Zero Entropy认为您的行为具有过高的风险揭示了随机数的有用性,并用记忆看到20来帮助他们在整个宇宙中传播反随机宣传的更大目标,从而覆盖了调试软件的记忆。