【问题标题】:Random number from an interval with bounds near maximum and minimum integer value区间中的随机数,边界接近最大和最小整数值
【发布时间】:2021-05-20 19:23:07
【问题描述】:

我已阅读有关此主题的其他帖子,但到目前为止我还没有找到答案。

给定一个长度为 1000 的数组,找出它的最小值和最大值。这些值是生成随机数的范围。

查找数组的最低和最高数字对我来说是可以的,但在这些范围内生成数字就不行了。

似乎一个简单的int number = random.nextInt(max - min) + min; 可以解决问题,但它没有,因为:

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

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

非常感谢...

【问题讨论】:

  • 这听起来有点像家庭作业......
  • @JasonV 是:-D

标签: java arrays random


【解决方案1】:

如果max==100min==-100000,那么max-min == +100100(注意没有abs())和

int number = random.nextInt(max - min) + min;

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

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

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

randomLong % range

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

【讨论】:

  • 是的,这就是问题所在。如何将随机长结果缩放到自定义范围?编辑:我确实找到了一篇关于此的文章。谢谢吉姆。
  • 更新答案。
猜你喜欢
  • 2011-02-09
  • 1970-01-01
  • 2023-03-25
  • 2021-02-19
  • 2019-08-17
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
  • 2020-02-07
相关资源
最近更新 更多