c#生成随机数

c#生成随机数

最近写东西需要在题库中随机选20道题,
这种需求当然要用到随机数,所以就在网上复制了一段代码下来,代码很精炼,用的也不错
附上链接表示感谢
Random ra=new Random(unchecked((int)DateTime.Now.Ticks));
int[] arrNum=new int[10]; 
int tmp=0; 
int minValue=1; 
int maxValue=10; 
for (int i=0;i<10;i++) 
{ 
tmp=ra.Next(minValue,maxValue); //随机取数 
arrNum=getNum(arrNum,tmp,minValue,maxValue,ra); //取出值赋到数组中 
} 
public int getNum(int[] arrNum,int tmp,int minValue,int maxValue,Random ra) 
{ 
int n=0; 
while (n<=arrNum.Length-1) 
{ 
if (arrNum[n]==tmp) //利用循环判断是否有重复 
{ 
tmp=ra.Next(minValue,maxValue); //重新随机获取。 
getNum(arrNum,tmp,minValue,maxValue,ra);//递归:如果取出来的数字和已取得的数字有重复就重新随机获取。 
} 
n++; 
} 
return tmp;
}
因为只抽了20道,所以一直没出问题,直到我把20改的很大,堆栈溢出了,
才发现在我的程序中用递归确实是一件很危险的事情,
于是又百度到了另一个人的代码
再次附上链接表示感谢
 http://www.cnblogs.com/huangfr/archive/2012/03/27/2420464.html
int[] index = new int[15]; 
for (int i = 0; i < 15; i++) 
index = i; 
Random r = new Random(); 
//用来保存随机生成的不重复的10个数 
int[] result = new int[10]; 
int site = 15;//设置上限 
int id; 
for (int j = 0; j < 10; j++) 
{ 
id = r.Next(1, site - 1); 
//在随机位置取出一个数,保存到结果数组 
result[j] = index[id]; 
//最后一个数复制到当前位置 
index[id] = index[site - 1]; 
//位置的上限减少一 
site--; 
}
我只想说:
一段好的代码足以拯救一个菜鸟程序的无数头发和时间


 
  
 
  
 
  

猜你喜欢

转载自blog.csdn.net/write_the_code/article/details/73331188