如果你听过这个话,请停止我。我已经遍布这个和其他论坛,看看是否有人试过这个,我无法在我的生活中找到它。
我试图生成一个随机数,但最大值/最小值是变量。这些值来自文本文件,可以由用户随意更改。
有没有办法制作单个rn.nextInt,使得Max / Min可以是负数,正数,正数和负数,或相同的数字(包括两者都是0)?
目的是在我的游戏中设置一个设置,用户可以在可购买的商品上选择加价值,但我也希望允许折扣。我还希望他们可以选择将两个值都设置为0并只使用项目的股票值。
我已经尝试了一些解决方法,包括:
//for Max = 0, Min = 0
int n = (rn.nextInt((a) + (b + 1000))) - 1000
我真的希望能够发挥作用。
非常感谢任何帮助。
答案 0 :(得分:0)
我正在尝试生成一个随机数,但Max / Min是变量。
这样的事情:
public int randomInRange(Random rn, int min, int max) {
return (int)(rn.nextLong(((long) max) - min + 1) + min);
}
此 应适用于所有min
或max
,前提是max >= min
。 (我们必须使用nextLong,因为如果“range”大于2 ^ 31 - 1,则nextInt会抛出异常。)
有没有办法制作单个rn.nextInt,使得Max / Min可以是负数,正数,正数和负数,或相同的数字(包括两者都是0)?
这样的事情:
public int randomBetween(Random rn, int range1, int range2) {
return randomInRange(rn,
Math.min(range1, range2),
Math.max(range1, range2))
}
显然,您可以重构上述方法,将第一个方法内联到第二个方法。如果按上述方式编写,以帮助您了解我如何找到解决方案。
CAVEATS:我没有对上面的内容进行测试,有可能存在涉及整数溢出和/或Integer.MIN_VALUE
等的边缘情况(但我不这么认为。)