Csharp/C#教程:C#生成指定范围内的不重复随机数分享

C#生成指定范围内的不重复随机数

//Number随机数个数 //minNum随机数下限 //maxNum随机数上限 publicint[]GetRandomArray(intNumber,intminNum,intmaxNum) { intj; int[]b=newint[Number]; Randomr=newRandom(); for(j=0;j<Number;j++) { inti=r.Next(minNum,maxNum+1); intnum=0; for(intk=0;k<j;k++) { if(b[k]==i) { num=num+1; } } if(num==0) { b[j]=i; } else { j=j-1; } } returnb; }

下面来介绍下其他网友的实现方法:

方法1:思想是用一个数组来保存索引号,先随机生成一个数组位置,然后把随机抽取到的位置的索引号取出来,并把最后一个索引号复制到当前的数组位置,然后使随机数的上限减一,具体如:先把这100个数放在一个数组内,每次随机取一个位置(第一次是1-100,第二次是1-99,…),将该位置的数用最后的数代替。

int[]index=newint[15]; for(inti=0;i<15;i++) index=i; Randomr=newRandom(); //用来保存随机生成的不重复的10个数 int[]result=newint[10]; intsite=15;//设置上限 intid; for(intj=0;j<10;j++) { id=r.Next(1,site-1); //在随机位置取出一个数,保存到结果数组 result[j]=index[id]; //最后一个数复制到当前位置 index[id]=index[site-1]; //位置的上限减少一 site--; }

方法2:利用Hashtable。

Hashtablehashtable=newHashtable(); Randomrm=newRandom(); intRmNum=10; for(inti=0;hashtable.Count<RmNum;i++) { intnValue=rm.Next(100); if(!hashtable.ContainsValue(nValue)&&nValue!=0) { hashtable.Add(nValue,nValue); Console.WriteLine(nValue.ToString()); } }

方法3:递归,用它来检测生成的随机数是否有重复,如果取出来的数字和已取得的数字有重复就重新随机获取。

Randomra=newRandom(unchecked((int)DateTime.Now.Ticks)); int[]arrNum=newint[10]; inttmp=0; intminValue=1; intmaxValue=10; for(inti=0;i<10;i++) { tmp=ra.Next(minValue,maxValue);//随机取数 arrNum=getNum(arrNum,tmp,minValue,maxValue,ra);//取出值赋到数组中 } ......... ......... publicintgetNum(int[]arrNum,inttmp,intminValue,intmaxValue,Randomra) { intn=0; while(n<=arrNum.Length-1) { if(arrNum[n]==tmp)//利用循环判断是否有重复 { tmp=ra.Next(minValue,maxValue);//重新随机获取。 getNum(arrNum,tmp,minValue,maxValue,ra);//递归:如果取出来的数字和已取得的数字有重复就重新随机获取。 } n++; } returntmp; }

上述就是C#学习教程:C#生成指定范围内的不重复随机数分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/906442.html

(0)
上一篇 2021年10月23日
下一篇 2021年10月23日

精彩推荐