0

インデックス 0 ~ 9 に整数値を格納する配列があります。次の方法で乱数を選択します。

val r = new scala.util.Random
var a=r.nextInt(10)

ここで、配列のインデックスの値aが 10 の場合、別の乱数を選択する必要があります。が 10の間、arr[random number generated]乱数を生成し続けます。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

おそらくあなたの場合、コードスニペットの下の1行が役に立ちます:

util.Random.shuffle(arr.zipWithIndex).find(_._1 != 10)

戻り値

Option[(Int, Int)] // (value, index) where value non 10

以下のwhileを使用したコードは私にとってはうまくいきます:

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 に答える