下面是我用来实现随机类的代码
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..我遗漏了什么?有时,它给出不同的结果,但它再次开始重复以前的结果。
发布于 2022-07-04 05:15:20
new Random()使用默认种子创建一个新的随机数生成器实例。
在.NET框架中,默认的种子值与时间有关.在.NET核心中,默认的种子值由线程静态伪随机数生成器产生.从文档中,如果相同的种子用于单独的随机对象,它们将生成相同的随机数序列。
如果默认的种子是基于时间的,并且快速地创建五个Random对象,那么每个生成器都会得到相同的种子(因为时间不太精确,每条指令都在不同的时间戳上执行),从而产生相同的伪随机数序列。
您将只希望创建一个Random实例一次;例如,作为一个类字段。
https://stackoverflow.com/questions/72852004
复制相似问题