Re: [.NET] 欲產生兩個亂數結果成對的問題....

看板Visual_Basic作者 (Free Myself?!)時間14年前 (2011/05/13 12:51), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/2 (看更多)
這樣就好啦。 Module Module1 Sub Main() Dim a, b As Integer Dim c, d As New Random a += c.Next(1, 20) b += c.Next(1, 20) Console.WriteLine("{0} {1}", a, b) Console.ReadLine() End Sub End Module msdn上面有寫,同時放多個random是沒有用的。 如果你要記錄每次的亂數,就用a和b來處理。 亂數的產生始於種子值。 如果重複使用相同的種子會產生相同的連續數字。 其中一個產生不同序列的方法是讓種子值時間相依,由此以每個 Random 的 新執行個體 (Instance) 產生不同的系列。 根據預設,Random 類別的無參 數建構函式會使用系統時鐘來產生其種子值,而參數化的建構函式可以根據 目前時間的刻度數目而接受 Int32 值。 然而,因為時鐘的解析度有限,所 以若使用無參數的建構函式在極短時間內連續建立不同的 Random 物件,就 會建立亂數產生器,這些產生器會產生序列完全相同的亂數。 http://msdn.microsoft.com/zh-tw/library/system.random.aspx ※ 引述《geniussilly (橘子與蘋果)》之銘言: : 我用的是VB2010 Express : 在寫程式的時候想產生兩個獨立亂數 : 結果出現讓人困窘的結果.... : 把問題簡化如下": : Module Module1 : Sub Main() : Dim a, b As Integer : Dim c, d As New Random : a += c.Next(1, 20) : b += d.Next(1, 20) : Console.WriteLine("{0} {1}", a, b) : Console.ReadLine() : End Sub : End Module : 原本預期是c,d是獨立的, 之後跑迴圈a,b可以隨機增加 : 結果c,d卻會成對出現, 也就是c=d : 然後我不死心又試著改成d.next(1,21) : 結果是要嘛c=d, 不然就是c = d-1 : 以此類推.... : 我試過用迴圈跑 : Dim s(1) As Integer : For x = 0 To 1 : s(x) = c.Next(1,20) : Next : 則的確可以跑出兩個獨立亂數,可是這樣不直觀也不方便 : 所以想請問如果想讓兩個亂數獨立產生應該怎麼做呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.125.216

05/13 14:41, , 1F
啊! 原來如此 非常感謝:)
05/13 14:41, 1F

05/13 16:37, , 2F
好文!
05/13 16:37, 2F
文章代碼(AID): #1DpBZ88S (Visual_Basic)
文章代碼(AID): #1DpBZ88S (Visual_Basic)