关于产生随机数出现重复的问题 在做项目时遇到这么一个问题:从专家库里随机选择专家,例如我输入产生专家人数为10,专业类型为“机电”,然后点击确定按钮后要给我产生10个不重复的机电类型的专家名称列表。由于random里的算法是一种伪随机,得出的结果偶然会有重复的数据。请各位高人指点! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我也遇到过这个问题,当时我做的是考试系统随机抽题。我的解决方法是把随机生成的数放进集合中,比如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());}以上是我的方法,应该还有其它方法,我就抛砖引玉献丑了,呵呵!!! to ljc_zy(彷徨):这种递归调用我也做过,但没法避免出现重复。to YYKXQ(异域狂想曲):我也是用这种方法处理的,但比较耗资源了。 to YYKXQ(异域狂想曲):同意你的方法。if (q.Contains(m) == false)最好改写成if (!(q.Contains(m)))在条件表达式中最好不要和布尔值进行比较,以避免不小心把“==”写成“=”的错误。 to wuyi8808(air|skyiv.com): 这是我的习惯写法,但是看了好多书,使用这种表达式时,也是不去和布尔值比较,我想避免写错符号是一个方面;可能if(!(q.Constains(m)))这种写法效率高。不管怎样,以后我是要改了,呵呵! 自己喜欢怎样写就怎样写,代码优化器会把他们整的一样的。无论q.Contains(m) = false还是false = q.Contains(m)都是语法错误,即编译时错误,因为两边都是不可被赋值的表达式。如果是固定数量,用数组的效率比任何一种容器要高,因为数组的空间是在一开始就分配好了,固定大小的,数据会连续储存。 同意Ivony() 的,C#里q.Contains(m) = false应该是通不过编译的另外,由于没有看清楚楼主的问题,这回的沙发白座了 求思路 为什么同一条语句,C和C#运行的结果不一样~~~ 能否按不在引号内的空格对字符串进行split? string简单问题 请高手指点,读取标准输出流(按行读取)导致错误的问题 高手救命!! 求助!!! 控件数组的问题: 请教!! 用c#做一个基于web应用程序的用户验证的程序,该怎么做呀! 我又来了。。。Socket系统缓冲区不足或队列已满的问题 ····很急的问题:command.Parameters.Add( parameter );里的add方法既不是私有方法,也不是静态方法。为什么就在remoting 里调用不了 这是什么意思哦
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());
}以上是我的方法,应该还有其它方法,我就抛砖引玉献丑了,呵呵!!!
这是我的习惯写法,但是看了好多书,使用这种表达式时,也是不去和布尔值比较,我想避免写错符号是一个方面;可能if(!(q.Constains(m)))这种写法效率高。不管怎样,以后我是要改了,呵呵!