保证6位数的随机数

时间:2014-05-13 04:57:00

标签: java scala random

我必须生成一个6位数的随机数。以下是我到目前为止所做的准则。它工作正常,但有时候它给 7位代替 6位数

主要问题是为什么?

如何生成一个有保证的6位数随机数?

val ran = new Random()
val code= (100000 + ran.nextInt(999999)).toString

8 个答案:

答案 0 :(得分:11)

如果ran.nextInt()返回的数字大于900000,那么总和将为7位数。

修复方法是确保不会发生这种情况。由于Random.nextInt(n)返回的数字小于n,因此以下内容可以正常使用。

val code= (100000 + ran.nextInt(900000)).toString()

答案 1 :(得分:3)

这是因为nextInt()返回 0(含)与指定值(不包含)之间的伪随机,均匀分布的int

你必须减少右边框。

答案 2 :(得分:3)

val code= (100000 + ran.nextInt(999999)).toString

问题是ran.nextInt(999999)可能会返回大于899999的数字,如果您添加100000,则会产生7位数字。

尝试将其更改为

val code= (100000 + ran.nextInt(899999)).toString

这将确保您的随机数大于或等于100000且小于或等于999999。

答案 3 :(得分:2)

的另一种方法
import scala.util.Random
val rand = new Random()

考虑6随机数字的向量,

val randVect = (1 to 6).map { x => rand.nextInt(10) }

然后,将矢量转换为整数值,

randVect.mkString.toLong

此程序足以处理任意数量的数字。如果Long无法代表向量,请考虑BigInt

<强>更新

此外,将它包装成一个隐式类,注意第一个数字不应该为零,

implicit class RichRandom(val rand: Random) extends AnyVal {
  def fixedLength(n: Int) = {
    val first = rand.nextInt(9)+1
    val randVect = first +: (1 until n).map { x => rand.nextInt(10) }
    BigInt(randVect.mkString)
  }
}

所以它可以用作

scala> rand.fixedLength(6)
res: scala.math.BigInt = 689305

scala> rand.fixedLength(15)
res: scala.math.BigInt = 517860820348342

答案 4 :(得分:1)

如果你想要一个可以用零开头的随机数,请考虑这个:

import scala.util.Random
val r = new Random()
(1 to 6).map { _ => r.nextInt(10).toString }.mkString

答案 5 :(得分:1)

Scala 2.13scala.util.Random开始提供

def between(minInclusive: Int, maxExclusive: Int): Int

如下使用的

生成一个6位数的Int(在100_000(包括)和1_000_000(排除)之间):

import scala.util.Random
Random.between(100000, 1000000) // in [100000, 1000000[

答案 6 :(得分:0)

import scala.util.Random
math.ceil(Random.nextFloat()*1E6).toInt

答案 7 :(得分:-1)

    min=100000
    max=999999
    ans=rand()%(max-min)+min