作者DeepSix (Free Myself?!)
看板Visual_Basic
标题Re: [.NET] 欲产生两个乱数结果成对的问题....
时间Fri May 13 12:51:18 2011
这样就好啦。
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.randocn.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
1F:推 geniussilly:啊! 原来如此 非常感谢:) 05/13 14:41
2F:推 horngsh:好文! 05/13 16:37