欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-15 14:53:19
c#生成指定范围内的不重复随机数 // number随机数个数 // minnum随机数下限 // maxnum随机数上限 public int[] get...

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

// number随机数个数
// minnum随机数下限
// maxnum随机数上限
public int[] getrandomarray(int number,int minnum,int maxnum)
 {
  int j;
  int[] b=new int[number];
  random r=new random();
  for(j=0;j<number;j++)
  {
  int i=r.next(minnum,maxnum+1);
  int num=0;
  for(int k=0;k<j;k++)
  {
   if(b[k]==i)
   {
   num=num+1;
   }
  }
  if(num==0 )
  {
   b[j]=i;
  }
  else
  {
   j=j-1;
  }
  }
  return b;
 }

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

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

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--; 
}

方法2:利用hashtable。

hashtable hashtable = new hashtable(); 
random rm = new random(); 
int rmnum = 10; 
for (int i = 0; hashtable.count < rmnum; i++) 
{ 
  int nvalue = rm.next(100); 
if (!hashtable.containsvalue(nvalue) && nvalue != 0) 
{ 
  hashtable.add(nvalue, nvalue); 
  console.writeline(nvalue.tostring()); 
} 
}

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

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; 
}

以上所述就是本文的全部内容了,希望大家能够喜欢。