Java 保证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位数的随机数。下面是我到目前为止所做的代码。它工作正常,但有时它会给出7个数字,而不是6个数字

主要问题是为什么

如何生成一个确定的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