Java 界接近最大和最小整数值的区间中的随机数

Java 界接近最大和最小整数值的区间中的随机数,java,arrays,random,Java,Arrays,Random,我读过其他关于这个话题的帖子,但到目前为止我还没有找到答案 给定长度为1000的数组,查找其最低值和最高值。这些值是生成随机数的范围 对我来说,找到数组的最低和最高数字是可以的,但在这些界限内生成数字则不行 似乎是一个简单的int number=random.nextInt(max-min)+min会起作用,但不会,因为: a) 最大值可以是100,最小值可以是-100000,这将成为负界限并导致错误 b) 其他解决方案,如random.nextInt(Math.abs(min)+Math.ab

我读过其他关于这个话题的帖子,但到目前为止我还没有找到答案

给定长度为1000的数组,查找其最低值和最高值。这些值是生成随机数的范围

对我来说,找到数组的最低和最高数字是可以的,但在这些界限内生成数字则不行

似乎是一个简单的
int number=random.nextInt(max-min)+min
会起作用,但不会,因为:

a) 最大值可以是100,最小值可以是-100000,这将成为负界限并导致错误 b) 其他解决方案,如
random.nextInt(Math.abs(min)+Math.abs(max))-Math.abs(min)
都会失败,因为在整数数据类型中,如果超过最大值,将两个正数相加可能会导致负值

假设我想在-2147483648和2147483647之间生成一个随机数。我该怎么做


非常感谢……

如果
max==100
min==-100000
,那么
max-min==+100100
(请注意不要
abs()
)和

将产生您正在寻找的价值。不要把事情过分复杂化

如果
max-min
(即范围)大于231-1,您将遇到问题,但要避开这一点,只需使用
long
。这有点复杂,因为没有方法
Random#nextLong(long bound)
,所以您只需使用
nextLong()
并将结果缩放到您的范围

有几种方法可以将
long
缩放到较小的范围,例如

randomLong % range

如果您真的想将其扩展到-2147483648..2147483647,那么只需从
中的任何位置提取32位,并将其转换为
int

这听起来像是一个奇怪的家庭作业。@JasonV是:-染料,这就是问题所在。如何将随机长结果缩放到自定义范围?编辑:我准确地找到了一篇关于这个的文章。谢谢,吉姆。更新答案。
randomLong % range