2012-09-21 42 views
0

可能重複:
F# getting a list of random numbersSystem.Random給出了相同的值,每次3次

我靠賒賬(定時器),每次正從列表中隨機值,但我m到處同樣3次才把它改變......

代碼:

let timer = new DispatcherTimer() 
timer.Tick.Add <| fun _ -> X.Change() 
timer.Interval <- new TimeSpan(0,0,3)  

    member X.Change() = 
     (Seq.nth 
      (System.Random().Next(Seq.length actions)) 
       <| actions)() 

爲什麼?我想每一次

+1

這已經被問[等等。 ..many ...倍(https://www.google.com/search?as_q=random+same+value&as_sitesearch=stackoverflow.com%2Fquestions)。請先搜索。 – Daniel

回答

2

我不能完全確定自己的例子來獲得不同的值,但總的原則是,你應該每個線程創建System.Random(或一個實例的一個例子,如果你有一個多線程應用程序),然後多次使用它。

嘗試這樣:

let timer = new DispatcherTimer() 
let rnd = new System.Random() 
timer.Tick.Add <| fun _ -> X.Change() 
timer.Interval <- new TimeSpan(0,0,3)  

    member X.Change() = 
     (Seq.nth 
      (rnd.Next(Seq.length actions)) 
       <| actions)() 

Random對象是可變的,並保持一個用於生成隨機值序列的某個狀態。當你創建一個新的實例時,它使用當前時間初始化狀態,所以如果你同時創建多個實例,你會得到相同的數字。

順便說一句,如果你需要訪問隨機元素的actions,那麼這將是更好地將它們存儲爲一個數組,因爲這樣你可以這樣寫:

member X.Change() = 
    actions.[rnd.Next(actions.Length)]() 
+0

ahm ...我忘了它,謝謝 – Cynede

+0

,但它很難添加到數組的行動:) – Cynede

相關問題