Java 返回两个整数之间的随机数-总是相同的值

Java 返回两个整数之间的随机数-总是相同的值,java,random,Java,Random,这个return语句不起作用,因为它总是返回整数20。任何求解技巧,都应该返回一个介于20(最小整数)和30(最大整数)之间的随机数。谢谢你的帮助 在解决了一些问题之后,结果是getMaxDamage();返回20而不是30,现在运行良好,输入错误。您的随机数生成代码很好 最合理的解释是,getMaxDamage()实际上返回了20而不是30 我建议添加一些临时打印输出来检查这些值,或者在调试器中运行它,以及检查getMaxDamage()代码中的错误 其他解释包括中微子/宇宙射线的极不幸运的存

这个return语句不起作用,因为它总是返回整数20。任何求解技巧,都应该返回一个介于20(最小整数)和30(最大整数)之间的随机数。谢谢你的帮助


在解决了一些问题之后,结果是getMaxDamage();返回20而不是30,现在运行良好,输入错误。

您的随机数生成代码很好

最合理的解释是,
getMaxDamage()
实际上返回了20而不是30

我建议添加一些临时打印输出来检查这些值,或者在调试器中运行它,以及检查
getMaxDamage()
代码中的错误


其他解释包括中微子/宇宙射线的极不幸运的存在,导致CPU寄存器中的位翻转,导致每次计算20,或者可能是星系间零熵委员会认为你的行为有太高的风险暴露出随机数的有用性,并将你调试软件的记忆改写为看到20的记忆,以帮助他们在全宇宙传播反随机宣传的更大目标。

你的随机数生成代码很好

最合理的解释是,
getMaxDamage()
实际上返回了20而不是30

我建议添加一些临时打印输出来检查这些值,或者在调试器中运行它,以及检查
getMaxDamage()
代码中的错误

其他解释包括中微子/宇宙射线的极不幸运的存在,导致CPU寄存器中的位翻转,导致每次计算20,或者可能是星系间零熵委员会认为你的行为有太高的风险暴露出随机数的有用性,并将你调试软件的记忆改写为20,以帮助他们在全宇宙传播反随机宣传的更大目标。

发布的代码是(尽管如此,不要重复使用相同的PRNG…)

对于这种行为,我能想到的最合理的解释是,这些值不是预期的值

/**
 * @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;
}
替换这些值将产生
nextInt(1)+20
,其中
nextInt(1)
始终返回0作为范围
[0,n)
内的整数


其他一些原因…(调试是关于开发和测试假设)

也许,
randomGenerator
不是
Random
而是

或者,可能是正确生成了一个随机数,“总是20”值来自其他地方

或者,在每次调用
nextInt
之前,随机数生成器都会被重新设定种子,而您非常不幸的是,该种子会导致“随机”选择20个

或者,你可能正在听@JasonC,并对我的所有假设进行破坏;-)

发布的代码是(尽管,请重复使用相同的PRNG…)

对于这种行为,我能想到的最合理的解释是,这些值不是预期的值

/**
 * @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;
}
替换这些值将产生
nextInt(1)+20
,其中
nextInt(1)
始终返回0作为范围
[0,n)
内的整数


其他一些原因…(调试是关于开发和测试假设)

也许,
randomGenerator
不是
Random
而是

或者,可能是正确生成了一个随机数,“总是20”值来自其他地方

或者,在每次调用
nextInt
之前,随机数生成器都会被重新设定种子,而您非常不幸的是,该种子会导致“随机”选择20个



或者,也许,你在听@JasonC并对我的所有假设进行破坏;-)

这个一般方程会起作用。我怀疑你的值不是你所期望的(或者你正在重新播种PRNG)。你确定
getMinDamage()
getMaxDamage()
正在返回您期望的结果?因为此代码看起来很好。您能否提供如何构造randomGenerator?可能是@MikeG010590的副本OP似乎已经具备了生成随机数的技术。他所描述的行为的唯一真正解释是
getMaxDamage()
返回的是20而不是30。这个通用公式会起作用。我怀疑您的值不是您所期望的值(或者是该值,或者您正在重新设定PRNG)。您确定
getMinDamage()
getMaxDamage()
正在返回您期望的结果?因为此代码看起来很好。您能否提供如何构造randomGenerator?可能是@MikeG010590的副本OP似乎已经具备了生成随机数的技术。他所描述的行为的唯一真正解释是
getMaxDamage()
返回的是20而不是30。第一个示例实际上会一直返回20,-nextInt(1)将始终返回0。但是,+1!@JasonC-Doh!谢谢,更正了。OP也可以使用例如javassist插入字节码并替换其方法,或者
Random.nextInt()
,使用一个总是返回20.8-@JasonC的方法,我只能希望不会-但我看到了一些奇怪的事情:|第一个示例实际上总是返回20,-
nextInt(1)
将始终返回0。但是,+1!@JasonC-Doh!谢谢,更正。OP也可能使用例如javassist来插入字节码并替换其方法,或者
Random.nextInt()
,使用一个总是返回20.8-@JasonC的方法,我只能希望不会-但我看到了一些奇怪的事情:|最可能的原因不在getMinDamage和getM中
class FairRandom {
    public int nextInt(int n) {
        return 0; /* chosen by fair dice roll */ }
    }
}