我如何在groovy中使用随机数?

Geo*_*zen 36 random groovy

我用这个方法:

def getRandomNumber(int num){
    Random random = new Random()
    return random.getRandomDigits(num)
}
Run Code Online (Sandbox Code Playgroud)

我打电话的时候写的 println getRandomNumber(4)

但我有一个错误

No signature of method: java.util.Random.getRandomDigits() is applicable for argument types: (java.lang.Integer) values: [4]
Run Code Online (Sandbox Code Playgroud)

注意:我在另一个groovy类中使用此方法,它正常工作,没有任何错误

Mar*_*ers 57

没有这样的方法java.util.Random.getRandomDigits.

要获取随机数,请使用nextInt:

return random.nextInt(10 ** num)
Run Code Online (Sandbox Code Playgroud)

您还应该在应用程序启动时创建一次随机对象:

Random random = new Random()
Run Code Online (Sandbox Code Playgroud)

每次需要新的随机数时,都不应创建新的随机对象.这样做会破坏随机性.


ana*_*ocs 23

生成介于1和[UPPER_LIMIT]之间的伪随机数

您可以使用以下内容生成介于1和上限之间的数字.

Math.abs(new Random().nextInt() % [UPPER_LIMIT]) + 1

这是一个具体的例子:

示例 - 生成1到600范围内的伪随机数:

Math.abs(new Random().nextInt() % 600) + 1
Run Code Online (Sandbox Code Playgroud)

这将为您生成一个范围内的随机数.在这种情况下1-600.您可以在整数范围内将值600更改为您需要的任何值.


在[LOWER_LIMIT]和[UPPER_LIMIT]之间生成伪随机数

如果要使用不等于1的下限,则可以使用以下公式.

Math.abs(new Random().nextInt() % ([UPPER_LIMIT] - [LOWER_LIMIT])) + [LOWER_LIMIT]

这是一个具体的例子:

示例 - 生成40到99范围内的伪随机数:

Math.abs( new Random().nextInt() % (99 - 40) ) + 40
Run Code Online (Sandbox Code Playgroud)

这将生成40和99范围内的随机数.

  • 轻微校正:Math.abs(new Random().nextInt()%600)+ 1.否则,您可以得到-1的mod结果,超出范围的结果为0,而不是正确的值2. (2认同)
  • @hirosht Math.abs(new Random().nextInt()%(UpperLimit - LowerLimit))+ LowerLimit (2认同)
  • 在选择此技术之前,请参阅 /sf/ask/768948211/。对随机值应用模算术可能会导致这些值不是以相等的概率生成的。 (2认同)

Dón*_*nal 13

通常,我发现RandomUtils(来自Apache commons lang)比生成随机数更简单java.util.Random