Random r = new Random();
  int i = r.Next(1000, 9999);请问如何改造下,生成唯一的随机数呢?
比如1000已经出过了,以后就不出了。

解决方案 »

  1.   

        List<int> list = new List<int>();//保留上次随机的数字
            Random r = new Random();
            int i = r.Next(1000, 9999);
            if (list.Contains(i))
            {
                //如果存在了,就从新生成下
                i = r.Next(1000, 9999);
            }
            list.Add(i);
      

  2.   

    如果不是非要用数字的话,可以考虑用Guid
     Guid id = Guid.NewGuid();
      

  3.   

    用动态数组把随机产生过的数字保存起来,在显示时加一个判断
    首先引入命名空间using System。colletions;
    Arraylist al=new arraylist();
    Random r=new Random();
    int i=r。Next(1000,9999);
    if(al。contains(i)==false)
    {
    al。add(i);
    console.read(i);
    }
      

  4.   


    //最终调用getRandomNum
    public 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;        }
            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;        }    }
      

  5.   


    void Main()
    {
    Console.WriteLine(GetNum());
    }
    string GetNum()
    {
    string s=Regex.Match(Guid.NewGuid().ToString().Replace("-",""),@"(\d{5})").Value;
       if(!string.IsNullOrEmpty(s))
       {
         return s;
       }
       else return GetNum();
    }
    http://topic.csdn.net/u/20100809/11/ca61b3ad-5806-4cf3-bc5c-33795738b2a6.html
      

  6.   

    用泛泛型类List<int>记录一下出现过的数字就行了,沙发正解
      

  7.   

    思路:  
    1.产生第一个后, 记忆该随机数(一般使用数组 或List)
    2.产生第二个时, 先判断记忆里有没有第二个随机数,如果没有,直接记忆;如果有,再次取得随机数。再进行是否存在处理。
    3.产生第三个时, 与第2步处理方式相同。提醒: 如果是一次性取得n个不重复的随机数,网上有很多优化方案,可以参考参考。