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

带有“变量Max/Min”的java随机数,java,random,Java,Random,如果你听过这个,就阻止我。我已经找遍了这个论坛和其他论坛,看看是否有人尝试过这个,我一辈子都找不到 我试图生成一个随机数,但Max/Min是变量。这些值来自文本文件,用户可以随意更改 是否有一种方法可以使单个rn.nextInt的最大/最小值同时为负值、正值、正值和负值,或者相同的数字(包括两者均为0) 其目的是在我的游戏中设置一个用户可以选择可购买物品的标记值,但我也希望允许折扣。我还希望他们可以选择将两个值都设置为0,并且只使用项目的股票价值 我已经尝试了一些变通方法,包括: //for M

如果你听过这个,就阻止我。我已经找遍了这个论坛和其他论坛,看看是否有人尝试过这个,我一辈子都找不到

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

是否有一种方法可以使单个rn.nextInt的最大/最小值同时为负值、正值、正值和负值,或者相同的数字(包括两者均为0)

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

我已经尝试了一些变通方法,包括:

//for Max = 0, Min = 0
int n = (rn.nextInt((a) + (b + 1000))) - 1000
我真的希望它能起作用

任何帮助都将不胜感激

我试图生成一个随机数,但Max/Min是变量

大概是这样的:

 public int randomInRange(Random rn, int min, int max) {
     return (int)(rn.nextLong(((long) max) - min + 1) + min);
 }
 public int randomBetween(Random rn, int range1, int range2) {
     return randomInRange(rn, 
                          Math.min(range1, range2), 
                          Math.max(range1, range2))
 }
如果max>=min,这应该适用于所有min或max。我们必须使用nextLong,因为如果范围大于2^31-1,nextInt将引发异常

是否有一种方法可以使单个rn.nextInt的最大/最小值同时为负值、正值、正值和负值,或者相同的数字(包括两者均为0)

大概是这样的:

 public int randomInRange(Random rn, int min, int max) {
     return (int)(rn.nextLong(((long) max) - min + 1) + min);
 }
 public int randomBetween(Random rn, int range1, int range2) {
     return randomInRange(rn, 
                          Math.min(range1, range2), 
                          Math.max(range1, range2))
 }
显然,您可以重构上述方法,将第一个方法内联到第二个方法中。如果按照上面的方式写,可以帮助您理解我是如何找到解决方案的


注意事项:我没有测试上述内容,可能存在涉及整数溢出和/或integer.MIN_值等的边缘情况,但我不这么认为。

抱歉,解决方案的输出值只是0到1000减去1000之间的某个数字,所以我只会得到一个负数,而不是每次都得到0,你的目标是什么?你期望什么样的产出?如果需要0,请使用0。如果你想要一个随机数,就用一个随机数。可能是重复的问题,而不是重复的问题。这个有一个重要的额外要求。。。最小值和最大值可以是负数。这对答案有很大的影响。@ElliottFrisch-这并不像你想象的那么简单:-结果证明我很傻,试图rn.nextIntMax+1-Min+Min,所以我只是把Min加回到随机数中。现在完全了解随机的工作原理,是的,它适用于变量类型中不太大的所有值,只要Max>Min,至少适用于我测试过的所有组合。谢谢大家!