我的思想是   给出两个 输入框  比如第一个是输入 A000001  第一个输入A000400  点击生成  就生成这个阶段的数字。不要重复。有代码更好。

解决方案 »

  1.   

    参考下我当年第一次生成随机数问题的帖子
    http://topic.csdn.net/u/20090216/09/cbd204fb-4312-4977-8e34-644a6958750a.html
      

  2.   

    int begin = int.Parse("00100");
    int end = int.Parse("01342");Random rdm = new Random();
    List<int> container = new List<int>();for (int i=0; i< 500; ++i)
    container.Add(rdm.Next(begin, end));foreach(int i in container)
    Console.WriteLine(i);
    Console.WriteLine("".PadLeft(10, '-'));//  利用linq的Distinct()剔除重复项
    var result = container.Distinct();
    foreach(int i in result)
    Console.WriteLine(i);// 如果显示false,表明有重复项。
    Console.WriteLine(container.ToArray().Length == result.ToArray().Length);
      

  3.   

    没用.net 我是C 所以没法给你贴代码,只能说理论了.
      

  4.   


      int begin = int.Parse("00100");
            int end = int.Parse("00500");        Random rdm = new Random();
            List<int> container = new List<int>();        for (int i = 0; i < 500; ++i)
                container.Add(rdm.Next(begin, end));        foreach (int i in container)
                Response.Write(i);
            Response.Write("".PadLeft(10, '-'));        //  利用linq的Distinct()剔除重复项
            var result = container.Distinct();
            foreach (int i in result)
                Response.Write(i);        // 如果显示false,表明有重复项。
            Response.Write(container.ToArray().Length == result.ToArray().Length);  我修改之后  测试几次 发现 有时候 有  false  也就是重复。
      

  5.   


     利用linq的Distinct()剔除重复项   这个明白
      

  6.   

    这句可以找出其中的重复项
    var repeats = container.GroupBy(i=>i).Select(o=>new {i=o.Key, count = o.Count()}).Where(r=>r.count>1).Select(x=>x.i);然后,我想说,重复项肯定是会有的。你的要求不就是取没有重复的项吗?我上面的例子里,result里存放的就是非重复的值。你的要求是每次按键产生一个不重复的随机数。那就在Click事件里加一个判断吧。大致如下。其中各种变量声明要考虑好。
    int newid;
    do
    {
        newid = random.Next(begin, end);
    }while (result.Contains(newid) && (result.ToArray().Length < (end-begin)));result.Add(newid);
      

  7.   

    随机排序,都放到池里,点一下按钮从池里取一个直到取完位置
    Queue<string> codePool = new Queue<string>();
    int beginNum = 1;
    int endNum = 40;
    var codes = Enumerable.Range(beginNum, endNum).Select(i => string.Format("A{0:0000}", i))
                .OrderBy(c => Guid.NewGuid().GetHashCode()).ToList();
    codes.ForEach(c => codePool.Enqueue(c));
    Console.WriteLine(codePool.Dequeue());
    Console.WriteLine(codePool.Dequeue());
    Console.WriteLine(codePool.Dequeue());
    Console.WriteLine(codePool.Dequeue());
    Console.WriteLine(codePool.Dequeue());
      

  8.   

    查找重复项的LINQ应该这样。我也LINQ新手,想复杂了,见谅。
    var repeats = container.GroupBy(i=>i).Where(g => g.Count()>1).Select(o=>o.Key);基本的思路:还是构造一个List,存放所有已产生的随机数。遇到新产生一个随机数,先比较是否已经在List中。有则抛弃,没有则添加进List,直到List满。
      

  9.   

    不重复,就需要取一个丢弃一个。所有可能的code都保存在queue里,取一个就出队列一次,直到用完为止。队列里的code是随机排序的,取出来看上去就像随机的结果。明白了?
      

  10.   

     protected void Page_Load(object sender, EventArgs e)
        {
            Set_Random();
        }
        /// <summary>
        /// 产生不重复随机数的方法
        /// </summary>
        /// <param name="minValue">最小值</param>
        /// <param name="maxValue">最大值</param>
        /// <param name="count">共产生多少随机数</param>
        /// <returns>int[]数组</returns>
        public int[] GetRandomUnrepeatArray(int minValue, int maxValue, int count)
        {
            Random rnd = new Random();
            int length = maxValue - minValue + 1;
            byte[] keys = new byte[length];
            rnd.NextBytes(keys);
            int[] items = new int[length];
            for (int i = 0; i < length; i++)
            {
                items[i] = i + minValue;
            }
            Array.Sort(keys, items);
            int[] result = new int[count];
            Array.Copy(items, result, count);
            Response.Write(result);
            return result;
        }
        public void Set_Random()
        {
            //调用产生随机数的方法产生的数据数是1111111到9999999之间的随机数输出10个
            int[] items = GetRandomUnrepeatArray(111111, 999999, 10);
            Response.Write(items);
        }
    请大家看看我这个代码 问题出在哪里  输出的是System.Int32[] 
      

  11.   

    生成Pool的过程只能是运行一次,codePool保存在Session里或者ViewState里。Queue<string> codePool = new Queue<string>();
    int beginNum = 1;
    int endNum = 40;
    var codes = Enumerable.Range(beginNum, endNum).Select(i => string.Format("A{0:0000}", i))
                .OrderBy(c => Guid.NewGuid().GetHashCode()).ToList();
    codes.ForEach(c => codePool.Enqueue(c));判断Session里如果Pool存在且Count>0则Dequeue取一次值。
      

  12.   

    public int[] GetRandomUnrepeatArray(int min, int max, int count)
    {
        return Enumerable.Range(min, max).OrderBy(c => Guid.NewGuid().GetHashCode()).Take(count).ToArray();
    }这个能保证你取的count内没重复。
      

  13.   

    首先特别鸣谢fangxinggood 和  Abbey 也谢谢其他的朋友。
    最后我的代码是这样处理的。希望和大家分享
     protected void Page_Load(object sender, EventArgs e)
        {
            Set_Random();
        }
        /// 
        /// 产生不重复随机数的方法
        /// 
        /// 最小值minValue
        /// 最大值maxValue
        /// 共产生多少随机数
        /// int[]数组
        public int[] GetRandomUnrepeatArray(int minValue, int maxValue, int count)
        {
            Random rnd = new Random();
            int length = maxValue - minValue + 1;
            byte[] keys = new byte[length];
            rnd.NextBytes(keys);
            int[] items = new int[length];
            for (int i = 0; i < length; i++)
            {
                items[i] = i + minValue;
            }
            Array.Sort(keys, items);
            int[] result = new int[count];
            Array.Copy(items, result, count);
            return result;
        }
        public void Set_Random()
        {
            //调用产生随机数的方法产生的数据数是1111111到9999999之间的随机数输出10个
            int[] items = this.GetRandomUnrepeatArray(1, 500, 500);       
            for (int i = 0; i < items.Length; i++)
            {            Array.Sort(items);//排序
                Response.Write("产生的随机数是:"+"B000" + items[i] + "");
                Response.Write("<br/>".ToString());
            }    }
    }
      

  14.   

    e,“鸣谢”这词用在这不是很恰当,呵呵。解决了问题就是好。相对而言,fangxinggood的方法是类似于挤牙膏,挤一点少一点。我的方法则刚好与之相反,是往桶里装水,装满了就算结束,也算殊途同归吧。
      

  15.   

    你的类似挤牙膏。你在GetRandomUnrepeatArray()函数里,用for循环准备了一个包括所有值的池