在做项目时遇到这么一个问题:从专家库里随机选择专家,例如我输入产生专家人数为10,专业类型为“机电”,然后点击确定按钮后要给我产生10个不重复的机电类型的专家名称列表。
由于random里的算法是一种伪随机,得出的结果偶然会有重复的数据。请各位高人指点!

解决方案 »

  1.   

    我也遇到过这个问题,当时我做的是考试系统随机抽题。我的解决方法是把随机生成的数放进集合中,比如Queue(队列),然后每次产生一个随机数,就查看该数在队列中是否存在,不存在就存入,存在就再次产生随机数...代码如下:Queue q=new Queue();
    Random r=new Random();
    int i=0;
    while(i<10)
    {
        //产生1至10的随机数
        int m=r.Next(1,11);
        /*判断随机数在队列中是否存在,不存在就放入队列,控制变量i加1;如果存在,就继续产生随机数*/
        if(q.Contains(m)==false)
        {
    q.Enqueue(m);
    i++;
        }
    }
    //将队列中的随机数输出
    while(i-->0)
    {
        MessageBox.Show(q.Dequeue().ToString());
    }以上是我的方法,应该还有其它方法,我就抛砖引玉献丑了,呵呵!!!
      

  2.   

    to  ljc_zy(彷徨):这种递归调用我也做过,但没法避免出现重复。to  YYKXQ(异域狂想曲):我也是用这种方法处理的,但比较耗资源了。
      

  3.   

    to  YYKXQ(异域狂想曲):同意你的方法。if (q.Contains(m) == false)最好改写成if (!(q.Contains(m)))在条件表达式中最好不要和布尔值进行比较,以避免不小心把“==”写成“=”的错误。
      

  4.   

    to wuyi8808(air|skyiv.com):
        这是我的习惯写法,但是看了好多书,使用这种表达式时,也是不去和布尔值比较,我想避免写错符号是一个方面;可能if(!(q.Constains(m)))这种写法效率高。不管怎样,以后我是要改了,呵呵!
      

  5.   

    自己喜欢怎样写就怎样写,代码优化器会把他们整的一样的。无论q.Contains(m) = false还是false = q.Contains(m)都是语法错误,即编译时错误,因为两边都是不可被赋值的表达式。如果是固定数量,用数组的效率比任何一种容器要高,因为数组的空间是在一开始就分配好了,固定大小的,数据会连续储存。
      

  6.   

    同意Ivony() 的,C#里q.Contains(m) = false应该是通不过编译的另外,由于没有看清楚楼主的问题,这回的沙发白座了