利用递归不让产生重复的数,但还是会有重复,请高手指点。
代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace ConsoleApplication1
{
class Program
{
public static 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 static int[] getRandomNum(int num, int minValue, int maxValue)
{
Random ra = new Random(unchecked((int)DateTime.Now.Ticks));
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); //取出值赋到数组中
}
return arrNum;
}
static void Main(string[] args)
{
int aa =10;
int Num = 8;
int[] num3 = new int[Num];
num3=getRandomNum(Num,1,aa);
foreach (int s in num3) //遍历数组
Console.WriteLine(s);
}
}
}
代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace ConsoleApplication1
{
class Program
{
public static 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 static int[] getRandomNum(int num, int minValue, int maxValue)
{
Random ra = new Random(unchecked((int)DateTime.Now.Ticks));
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); //取出值赋到数组中
}
return arrNum;
}
static void Main(string[] args)
{
int aa =10;
int Num = 8;
int[] num3 = new int[Num];
num3=getRandomNum(Num,1,aa);
foreach (int s in num3) //遍历数组
Console.WriteLine(s);
}
}
}
解决方案 »
- C#写的程序怎么让他执行后自动删除
- DataGridView行变色问题
- Winform里dateTimePicker控件中禁止选择某一天
- 在左右框架中,树形菜单新窗口打开,为什么他跳出了整个框架,而不是直接在右框架打开?
- C#邮件开发问题急急急急啊 跪求答案
- 如何为reportviewer指定打印机而不用系统默认的?
- 实现Email群发,up有分
- 如何改变dataset中某一个表的字段的属性,如AllowNull,头痛!!!!
- 我是新人,Visual C#的初学者,请各位指教?
- 我想做一个类似资源管理器的东西?
- txt导入c#的困惑
- 在WM6上开发基于Compact FrameWork 2.0的TCP应用程序,出现的奇怪问题
ArrayList myList=new ArrayList();
Random rnd=new Random();
while(myList.Count<100)
{
int num=rnd.Next(1,101);
if(!myList.Contains(num))
myList.Add(num);
}
for(int i=0;i<100;i++)
intArr[i]=(int)myList[i];
产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。
应该有很多种方法的哦。
我也是刚学不久哦。呵呵。
大概算法 就是上面那样吧 应该
//返回一个随机字符串
public string RandStr(int iCount)
{
Random rand = new Random(unchecked(iCount * (int)DateTime.Now.Ticks));
return DateTime.Now.ToString("yyyyMMddHHmmss") + rand.Next(100, 999).ToString();
}
{
int j;
int[] b=new int[Number];
Random r=new Random();
for(j=0;j<Number;j++)
{
int i=r.Next(minNum,maxNum);
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;
}
http://www.cnblogs.com/Fooo/archive/2008/12/28/1364094.html
class Program
{
public static void Main()
{
int n = 10, min = 1, max = 10;
int[] arr=GetRndArray(n,min,max); foreach (int v in arr)
{
Console.Write("{0} ", v);
}
Console.WriteLine();
} static int[] GetRndArray(int Number, int minNum, int maxNum)
{
int n=maxNum -minNum+1;
int[] a = new int[n];
for (int i = 0; i < n; i++)
{
a[i] = minNum+i ;
}
Random rnd=new Random();
int[] b = new int[Number];
for (int i = 0; i < Number ; i++)
{
int r = rnd.Next(i,n);
b[i] = a[r];
a[r] = a[i];
}
return b;
}
}