利用递归不让产生重复的数,但还是会有重复,请高手指点。 
代码如下: 
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); 


}

解决方案 »

  1.   

    int[] intArr=new int[100];
    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,并且不能重复。
    应该有很多种方法的哦。
    我也是刚学不久哦。呵呵。
    大概算法 就是上面那样吧 应该
      

  2.   

    这个问题是由于CPU运算时钟太快导致,连续两次出现的随机种子一样解决方法是:连续生成随机数的索引做为参数,生成随机数,这样就不会重复了如:
            //返回一个随机字符串
            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();
            }
      

  3.   

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

  4.   


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