我必须生成一个6位随机数。以下是我迄今为止所做的代码。它工作正常,但它的一些时间给7位数字代替6位数字。
主要问题是为什么?
如何生成有保证的6位随机数?有保证的6位随机数
val ran = new Random()
val code= (100000 + ran.nextInt(999999)).toString
我必须生成一个6位随机数。以下是我迄今为止所做的代码。它工作正常,但它的一些时间给7位数字代替6位数字。
主要问题是为什么?
如何生成有保证的6位随机数?有保证的6位随机数
val ran = new Random()
val code= (100000 + ran.nextInt(999999)).toString
如果ran.nextInt()
返回比900000
大的数,则总和将是一个7位数字。
解决方法是确保不会发生。由于Random.nextInt(n)
返回的数字小于n
,因此以下内容将起作用。
val code= (100000 + ran.nextInt(900000)).toString()
这是因为nextInt()
返回一个伪随机,均匀分布0(含)和指定值(独家)
你必须减少对一个你的右边框之间int
值。
min=100000
max=999999
ans=rand()%(max-min)+min
val code= (100000 + ran.nextInt(999999)).toString
问题是ran.nextInt(999999)
可能比899999返回数更大,这将导致7位数的号码一起,如果你添加100000
尝试将其更改为
val code= (100000 + ran.nextInt(899999)).toString
这将确保您的随机数大于或等于100000且小于或等于999999.
但从未等于999999 –
另一种方法,对于
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
如果你想要一个可以从零开始的随机数,考虑这个:
import scala.util.Random
val r = new Random()
(1 to 6).map { _ => r.nextInt(10).toString }.mkString
import scala.util.Random
math.ceil(Random.nextFloat()*1E6).toInt
首先你写的'ran.nextInt(899999)'那么你更新到'900000' –
@LOL,是的,我没有,因为我检查了我的引用和验证Random.nextInt的'的行为(N )'。原来的答案本来就不会选择数字“999999”,尽管它会以相等的概率选择每个*其他*六位数字。 – merlin2011
表示'ran.nextInt(900000)'将从0生成899999 –