我有一个数组存储索引0到9的整数值。 我通过以下方式选择一个随机数:
val r = new scala.util.Random
var a=r.nextInt(10)
现在,如果数组中索引a
的值为10,我们需要选择另一个随机数。
因此,虽然arr[random number generated]
为10,但我们会继续生成随机数,因为我们需要一个arr[random nnumber]!=10
所以,当我把代码编写为:
while(arr2(a)==10)
a=r.nextInt(10)
它将进入无限循环。 但是,如果我将代码编写为:
if(arr2(a)==10)
while(arr2(a)==10)
a=r.nextInt(10)
它运作得很好。为什么会这样?
答案 0 :(得分:1)
可能对于你的情况,代码片段下面的一行是有用的:
util.Random.shuffle(arr.zipWithIndex).find(_._1 != 10)
返回
Option[(Int, Int)] // (value, index) where value non 10
以下代码对我有效:
scala> val arr = 1 :: List.fill(9)(10)
arr: List[Int] = List(1, 10, 10, 10, 10, 10, 10, 10, 10, 10)
scala> var idx = util.Random.nextInt(10)
idx: Int = 9
scala> while(arr(idx) == 10) {
| idx = util.Random.nextInt(10)
| }
scala> idx
res1: Int = 0