当前位置: 移动技术网 > IT编程>开发语言>c# > C#生成指定范围内的不重复随机数

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

2019年07月18日  | 移动技术网IT编程  | 我要评论

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

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网