0

我有一个数组,它在索引 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)

它工作得很好。为什么会这样?

4

1 回答 1

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
于 2012-09-30T18:16:21.217 回答