Java 保证6位随机数
我必须生成一个6位数的随机数。下面是我到目前为止所做的代码。它工作正常,但有时它会给出7个数字,而不是6个数字Java 保证6位随机数,java,scala,random,Java,Scala,Random,我必须生成一个6位数的随机数。下面是我到目前为止所做的代码。它工作正常,但有时它会给出7个数字,而不是6个数字 主要问题是为什么 如何生成一个确定的6位随机数 val ran = new Random() val code= (100000 + ran.nextInt(999999)).toString 如果ran.nextInt()返回的数字大于900000,则总和将为7位数字 解决办法是确保这种情况不会发生。由于返回的数字小于n,因此以下操作有效 val code= (100000 + r
主要问题是为什么
如何生成一个确定的6位随机数
val ran = new Random()
val code= (100000 + ran.nextInt(999999)).toString
如果ran.nextInt()
返回的数字大于900000
,则总和将为7位数字
解决办法是确保这种情况不会发生。由于返回的数字小于n
,因此以下操作有效
val code= (100000 + ran.nextInt(900000)).toString()
这是因为nextInt()
你必须把你的右边界缩小到1
min=100000
max=999999
ans=rand()%(max-min)+min
问题是ran。nextInt(999999)
可能返回大于899999的数字,如果加上100000,这将导致7位数字加在一起
试着把它改成
val code= (100000 + ran.nextInt(899999)).toString
这将确保您的随机数大于或等于100000,小于或等于999999。另一种方法,例如
import scala.util.Random
val rand = new Random()
考虑一个6
随机数字的向量
val randVect = (1 to 6).map { x => rand.nextInt(10) }
然后,将向量转换为整数值
randVect.mkString.toLong
这个过程足够一般,可以处理任意数量的数字。如果<代码>长不能表示向量,请考虑<代码> BigIt< /C> > < /P>
更新
此外,将其封装到隐式类中,注意第一个数字不应为零
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
启动Scala 2.13提供了:
如下所示,生成一个6位数的Int
(介于100_000
(包括)和1_000_000
(不包括)之间):
导入scala.util.Random
Random.between(100000,1000000)//in[100000,1000000[
首先编写ran.nextInt(899999)
然后更新到900000
@LOL,是的,我这样做了,因为我检查了我的引用并验证了Random.nextInt(n)的行为
。原始答案可能会将编号999999
本身排除在选择之外,尽管它会以相同的概率每隔六位数选择一个。平均值ran.nextInt(900000)
将从0到899999生成此类型的生成将从生成的字符串中排除以0开头的数字。但决不等于99999谢谢您的答案,但我必须选择merlin2011答案,因为他首先给出了完整的解释,但在我的实际代码中,我使用的是您的代码。@LOL note val in val code=randVect.mkString,t感谢您考虑这个答案。@GovindSinghNagarkoti通过代码检查无法证明它总是给出6位数字;同时运行蛮力测试(10亿次运行),所有输出都是6位数字。确保使用的代码是此处建议的复制和粘贴。是的,您是对的,7位数字有任何其他原因
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