Re: [.NET] 欲產生兩個亂數結果成對的問題....
這樣就好啦。
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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):