C#产生随机数 不重复

  • Post author:
  • Post category:其他


Random r = new Random();

int i1 = r.Next(5);

上面的是产生1个,0-5的随机数

但是我现在想要连续产生3个0-5之间的数而且不能重复。如何写代码?

private const int Num = 3; //数目

private const int MaxValue = 5; //最大数

private const int MinValue = 1; //最小数

public int[] sort(int[] num)

{

int i,j ,temp;

int n = num.Length;

for (i = 0; i < n – 1; i++)

{

for (j = i + 1; j < n; j++) /*注意循环的上下限*/

{

if (num[i] > num[j])

{

temp = num[i];

num[i] = num[j];

num[j] = temp;

}

}

}

return num;

}

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;

}

public string getRandomNum(int num, int minValue, int maxValue)

{

Random ra = new Random(unchecked((int)DateTime.Now.Ticks));

string strNum = “”;

int[] arrNum = new int[num];

int tmp = 0;

for (int i = 0; i <= num – 1; i++)

{

tmp = ra.Next(minValue, maxValue); //随机取数

arrNum[i] = getNum(arrNum, tmp, minValue, maxValue, ra); //取出值赋到数组中

}

this.sort(arrNum);

for (int i = 0; i <arrNum.Length; i++)

{

string s = Convert.ToString(arrNum[i]);

strNum = strNum + s + ” “;

}

return strNum;

}

this.getRandomNum(redNum, redMinValue, redMaxValue).Trim();

输出这个值,调用这个方法就可以了,总结了这些方法你以后不关多少范围和几个不重复只要改最上面3个变量就行了。

没有进行测试,仅收藏..