c# 产生不重复随机数的问题

来源:百度知道 编辑:UC知道 时间:2024/06/21 19:30:18
假设我有两个数组
int[] idlength = new int[] {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,21,22,23,24 };
int result[];
还有一个随机对象
Random random = new Random();
请问如何将产生10个不重复且范围在数组idlength里的数,然后将它赋给数组 result。
代码不得超过20行 写好注释更佳
此问题是我的一个项目的难点。
若有缘请加我为好友 QQ975151143

主要是要利用数组下标
第一次:从0至23取随机数,例如:8,把idlength[8]中的值放到result[0],然后把idlength[24]中的值放到idlength[8]。
第二次,从0至22取随机数。。。。。

int[] idlength = new int[] {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,21,22,23,24 };
int[] result=new int[10];
for (int i = 1; i <= 10; i++)
{
Random random = new Random(DateTime.Now.Millisecond);
int rang = 24 - i;//随机数下标的范围
int index= random.Next(0, rang);//随机获取一个0到rang的下标
result[i - 1] = idlength[index];//取值赋给result
idlength[index] = idlength[rang];
}

http://msdn.microsoft.com/zh-cn/library/h343ddh9.aspx

随机数的生成是从种子值开始。如果反复使用同一个种子,就会生成相同的数字系列。产生不同序列的一种方法是使种子值与时间相关,从而对于 Random 的每个新实例,都会产生不同的系列。默认情况下,Random 类的无参数构造函数使用系统时钟生成其种子值,而参数化构造函数可根据当前时间的刻度