带有"变量Max / Min"的java随机数

时间:2016-01-30 00:16:28

标签: java random

如果你听过这个话,请停止我。我已经遍布这个和其他论坛,看看是否有人试过这个,我无法在我的生活中找到它。

我试图生成一个随机数,但最大值/最小值是变量。这些值来自文本文件,可以由用户随意更改。

有没有办法制作单个rn.nextInt,使得Max / Min可以是负数,正数,正数和负数,或相同的数字(包括两者都是0)?

目的是在我的游戏中设置一个设置,用户可以在可购买的商品上选择加价值,但我也希望允许折扣。我还希望他们可以选择将两个值都设置为0并只使用项目的股票值。

我已经尝试了一些解决方法,包括:

//for Max = 0, Min = 0
int n = (rn.nextInt((a) + (b + 1000))) - 1000

我真的希望能够发挥作用。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

  

我正在尝试生成一个随机数,但Max / Min是变量。

这样的事情:

 public int randomInRange(Random rn, int min, int max) {
     return (int)(rn.nextLong(((long) max) - min + 1) + min);
 }

应适用于所有minmax,前提是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等的边缘情况(但我不这么认为。)