【问题标题】:How to specify ranges to java.util.Random? [duplicate]如何为 java.util.Random 指定范围? [复制]
【发布时间】:2016-08-25 19:26:53
【问题描述】:

我不知道为什么 Java 的设计者没有设计 java.util.Random 对象来返回这样的随机数:

rand.nextInt(minValue, maxValue);

我不明白如何将最小值和最大值传递给这个函数。我看过这个推荐:

random.nextInt(max + 1 - (min)) + min

但这意味着什么?这是否意味着:

random.nextInt(FULL_RANGE + 1) + START_OF_RANGE

例如,如果我想生成介于 -1 和 1 之间(含)的值,我是这样做的吗:

int oneOfThreeChoices = rand.nextInt(1 + 1 + 1) - 1;

【问题讨论】:

  • 关于“这是什么意思”:max - min + 1 是范围的大小。例如,如果您想要[1, 4] 范围内的值,那么您需要 4 个不同的值(1、2、3、4)——即4 - 1 + 1。现在,由于 nextInt 的 arg 是独占的,所以你想传入 4。这会得到 {0, 1, 2, 3} 中的值,所以无论你得到什么值,你只需将其上移 1(即,@ 987654328@) 获取 {1, 2, 3, 4} 中的值。
  • 由模组链接的答案是一个复杂得多的问题。最上面的答案是无关紧要的。这有什么帮助?这对我没有帮助。
  • 怎么不相关?据我所知,您的问题基本上是“如何在给定的最小/最大范围内生成随机整数?”如果这是您的问题,则链接的副本会回答它,我在这里的评论甚至通过示例对其进行了解释。如果这不是你的问题,那是什么?

标签: java android random


【解决方案1】:

API 为您提供了足够的工具来完成此任务。如果您想要范围 [a,b] 上的随机整数,包括两端,请使用

int n = random.nextInt(b-a+1) + a

假设random 是一个先前声明为java.util.Random 类型的对象。

【讨论】:

    【解决方案2】:

    random.nextInt(bound) 返回从 0 到 bound 的随机数(不包括)。例如random.nextInt(10) 返回从 0 到 9 的随机数。

    所以,如果你想返回从 5 到 15(含)的数字,只需说

    random.nextInt(11) + 5
    

    为什么 java 设计者没有为 JDK 提供更方便的 API?我认为因为这里解释的方式非常简单明了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-24
      • 2013-01-20
      相关资源
      最近更新 更多