我正在使用一种方法来创建两个int具有随机数的新数组,但这两个数组包含完全相同的数字.为什么会这样?
static void Main(string[] args)
{
int[] Foo1= Foo(1000);
int[] Foo2= Foo(1000);
}
static int[] Foo(int length)
{
int[] Array = new int[length];
Random r = new Random();
for (int i = 0; i < length; i++)
{
Array[i]=r.Next(1, 101);
}
//Thread.Sleep(6);
return Array;
}
Run Code Online (Sandbox Code Playgroud)
这是因为你的随机数被初始化了两次,时间差太小而没有种子.
试试这个 :
static void Main(string[] args)
{
Random r = new Random();
int[] Foo1= Foo(1000,r);
int[] Foo2= Foo(1000,r);
}
static int[] Foo(int length, Random r)
{
int[] Array = new int[length];
for (int i = 0; i < length; i++)
{
Array[i]=r.Next(1, 101);
}
//Thread.Sleep(6);
return Array;
}
Run Code Online (Sandbox Code Playgroud)
另一个回答"你正在使用具有相同种子的两个Random实例"是正确的.但是,他们曾经使用静态变量来引用一个实例Random.如果您尝试从多个线程使用它,这可能会导致问题,因为Random它不是线程安全的.
有各种解决方法(例如创建Random每个线程的一个实例,使用静态方法安全地访问它) - 我写了很多关于这个主题的文章,你可能会发现它很有用.
| 归档时间: |
|
| 查看次数: |
671 次 |
| 最近记录: |