想利用C# 编写一个函数产生指定范围与个数的随机数组,
但是数组结果是每一个随机数都一样,不知道为什么?
难道是由于时间间隔太短导致种子都一样?
那如果想产生不重复的指定范围的随机数组应该怎么写呢?
代码如下: public static int[] CreateRandom(int randomCount,int min,int max)
{
int[] randomArr = new int[randomCount];
Random ran;
for (int i = 0; i < randomCount; i++)
{ //--这种方法产生的随机数全部一样...囧
//long tick = DateTime.Now.Ticks;
//ran = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32));
//randomArr[i] = ran.Next(min,max); //--这种方法产生的随机数也全部一样...囧
int iSeed = 10;
ran = new Random(iSeed++);
randomArr[i] = ran.Next(min, max);
}
return randomArr;
}
产生的结果类似以下:
调用:CreateRandom(13,50000,90000);
结果:76053,76053,76053,76053,76053,76053,76053,76053,76053,76053,76053,76053,76053
为什么会这样子呢?
请指教,谢谢!
但是数组结果是每一个随机数都一样,不知道为什么?
难道是由于时间间隔太短导致种子都一样?
那如果想产生不重复的指定范围的随机数组应该怎么写呢?
代码如下: public static int[] CreateRandom(int randomCount,int min,int max)
{
int[] randomArr = new int[randomCount];
Random ran;
for (int i = 0; i < randomCount; i++)
{ //--这种方法产生的随机数全部一样...囧
//long tick = DateTime.Now.Ticks;
//ran = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32));
//randomArr[i] = ran.Next(min,max); //--这种方法产生的随机数也全部一样...囧
int iSeed = 10;
ran = new Random(iSeed++);
randomArr[i] = ran.Next(min, max);
}
return randomArr;
}
产生的结果类似以下:
调用:CreateRandom(13,50000,90000);
结果:76053,76053,76053,76053,76053,76053,76053,76053,76053,76053,76053,76053,76053
为什么会这样子呢?
请指教,谢谢!
可以用时间做种子也可以把iSeed的定义放到外面去。。
public static int[] CreateRandom(int randomCount,int min,int max)
{
int[] randomArr = new int[randomCount];
Random ran;
int iSeed = 10; // 应该在这里定议呀。
for (int i = 0; i < randomCount; i++)
{
ran = new Random(iSeed++);
randomArr[i] = ran.Next(min, max);
}
return randomArr;
}
按上面的思路来。
晕!太大意了,这样子的确解决了。
不过,为什么使用前面注释部分也不行呢?
long tick = DateTime.Now.Ticks;
ran = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32));
randomArr[i] = ran.Next(min,max);
也就是:ran = new Random();
产生的随机数也相同,
它默认使用的种子就是当前时间吧,
怎么会一样呢?
Random r = new Random((int)(tick & 0xffffffffL) | (int) (tick >> 32));//保证生成随机数重复率很低
移到函数外成为类字段