這個問題在這里已經有了答案: Random.Next 總是回傳相同的值 [重復] 4 個答案 1 小時前關閉。
這是我用來實作 Random 類的代碼
class Program
{
public static void Main()
{
for (int j = 0; j < 5; j )
{
foreach (var item in GenerateRandomList(new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }))
Console.Write(item " ");
Console.WriteLine(" ");
}
}
public static List<int> GenerateRandomList(List<int> arr)
{
var random = new Random(new Random().Next(1,10000));
var ls = new List<int>();
while(arr.Count>0)
{
var index = random.Next(0, arr.Count-1);
ls.Add(arr[index]);
arr.RemoveAt(index);
}
return ls;
}
}
以下是我得到的結果
first time
4 3 8 2 1 6 7 5 9 0
4 3 8 2 1 6 7 5 9 0
4 3 8 2 1 6 7 5 9 0
4 3 8 2 1 6 7 5 9 0
4 3 8 2 1 6 7 5 9 0
second time
6 3 4 2 8 5 9 1 7 0
6 3 4 2 8 5 9 1 7 0
6 3 4 2 8 5 9 1 7 0
6 3 4 2 8 5 9 1 7 0
6 3 4 2 8 5 9 1 7 0
third time
9 2 4 8 1 6 3 5 7 0
9 2 4 8 1 6 3 5 7 0
9 2 4 8 1 6 3 5 7 0
9 2 4 8 1 6 3 5 7 0
7 1 3 6 5 2 8 9 4 0
and So on..
我錯過了什么?有時它會給出不同的結果,但它又開始重復以前的結果。
uj5u.com熱心網友回復:
new Random()使用默認種子創建一個新的亂數生成器實體。
在 .NET Framework 中,默認種子值取決于時間。在 .NET Core 中,默認種子值由執行緒靜態偽亂數生成器生成。來自檔案:
如果相同的種子用于不同的 Random 物件,它們將生成相同的亂數序列。
如果默認種子是基于時間的,并且您Random快速連續創建五個物件,則每個生成器都將獲得相同的種子(因為時間并不精確,每條指令在不同的時間戳上執行),從而產生相同的偽亂數序列。
您將只想創建一次Random實體;例如,作為類欄位。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/498391.html
