2012-09-30 37 views
0

我有在索引存儲整數值0到9 我選擇以下列方式的隨機數的數組:while循環中階

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) 

它工作得很好。這是爲什麼發生?

+2

你能不能給我們一個完整的,可運行的代碼示例,重現您所描述的行爲? – sepp2k

+0

無論您最終選擇哪種解決方案,都要確保您的數組不僅包含值10,還要爲您執行的嘗試次數設置上限。 –

回答

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