在scala中循环

时间:2012-09-30 17:54:03

标签: scala while-loop

我有一个数组存储索引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)

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

1 个答案:

答案 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