假设掷骰子的可能结果是{1,2,3,4,5,6}中的一个
当两个骰子被扔三次时,我想收集两个骰子的随机结果.
我的实施是
var q = from threeTimes in new int[] { 1, 2, 3 }
let set1 = new Random().Next(1, 6)
let set2 = new Random().Next(1, 6)
select new { s1 = set1, s2 = set2 };
foreach (var v in q)
{
Console.WriteLine("Die1 :{0} Die2 :{1}", v.s1, v.s2);
}
Run Code Online (Sandbox Code Playgroud)
但是大多数时候我收到Die1和Die2的相同值.
我的意思是
Die1: 5 Die2: 5
Die1: 2 Die2: 2
Die1: 2 Die2: 2
Run Code Online (Sandbox Code Playgroud)
为获得随机对,我需要进行哪些修正?
Zoo*_*oba 11
发生这种情况是因为您正在Random
即时创建两个对象.默认情况下,他们使用基于时间的值播种,很可能Environment.TickCount
,虽然我没有看到这个确认.
Random
在查询之前构造一个将解决此问题,将分别为两个对象播种:
var rnd = new Random();
var q = from threeTimes in new int[] { 1, 2, 3 }
let set1 = rnd.Next(1, 6)
let set2 = rnd.Next(1, 6)
select new { s1 = set1, s2 = set2 };
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1666 次 |
最近记录: |