[英]C# Random Pair generation
假設擲骰子的可能結果是{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);
}
但是大多數時候我收到Die1和Die2的相同值。
我的意思是
Die1: 5 Die2: 5
Die1: 2 Die2: 2
Die1: 2 Die2: 2
為獲得隨機對,我需要進行哪些修正?
發生這種情況是因為您正在即時創建兩個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 };
給Random一個種子(它的其他構造函數)並繼續使用相同的實例,而不是每次都新建一個。
創建一個Random()實例,然后調用.Next():
Random random = new Random();
var q = from threeTimes in new int[] { 1, 2, 3 }
let set1 = random.Next(1, 6)
let set2 = random.Next(1, 6)
select new { s1 = set1, s2 = set2 };
foreach (var v in q)
{
Console.WriteLine("Dice1 :{0} Dice2 :{1}", v.s1, v.s2);
}
運行random.Next(); 在兩者之間?
我認為在使用構造函數時,同一秒內的兩個調用將檢索相同的值,這樣您就可以使用它。 嘗試創建一個Random實例並使用該實例。
隨機r = new Random(); 設set1 = r.next(1,6); 設set2 = r.next(1,6);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.