大侠们,我现在做了一个Random方法,就是专门生成制作一个产生随机数列的方法,即
public static ArrayList RandomNum(int count,int maxvalue)
{
Random r = new Random();
ArrayList al = new ArrayList();
ArrayList arraylist = new ArrayList();
for (int i = 0 ; i < maxvalue ; i++){
arraylist.Add(i.ToString());
}
int randomIndex ;
for (int i = 0; i < count;)
{
randomIndex = r.Next(maxvalue);
bool idex = al.Contains(randomIndex);
bool insign = arraylist.Contains(randomIndex);
if ((idex == false )&&(insign == false))
{
al.Add(randomIndex);
i++;
}
}
return al;
}
如果我调用public static ArrayList RandomNum(4,4),则会产生一个{0},{2},{3},{1}的序列。
每次产生都会生成一个不同的序列。但是,现在我要循环这个RandomNum(4,4),比如
                           string str = "";
for (int i = 0; i < num ; i++){
ArrayList al = RandomNum(4,4);
for (int j = 0 ; j < al.Count ;j++){
str += al[j].ToString()+",";
}
str += "\r\n";
Application.DoEvents();
}
结果是num组同样的随机数字,而我希望,得到的num组随机数字串,可以都是随机产生的数字。
不知道问题出在那里,请高手帮助啊。

解决方案 »

  1.   

    我想可能是你的机器太快了吧,以至于 两次 RandomNum 之间的时差连一个tick都不到把那个Random r = new Random();放到函数外面作为全局的就可以了static Random r = new Random();
    public static ArrayList RandomNum(int count, int maxvalue)
    {
    ArrayList al = new ArrayList();
    。。
      

  2.   

    你的机器真的是很快耶,我这里num=5以后就看出差别来了
      

  3.   

    机器太快了,默认随机种子(系统时间)没有变化先得到随机种子 int i; (全局)随机种子的地方变话种子 new Random((int)(i++/3)); (这里随便做些运算)
      

  4.   

    还快吗?
    我这里写了10个循环,都还一样,真的很诧异
    tiaoci(我挑刺,我快乐) 你怎么定义的NUM=5,我怎么定义都会一样,偶尔才可能不一样.
    真的很奇怪.
      

  5.   

    太快么?那在外面循环中加个sleep等待一下试试
      

  6.   

    我知道了,成功了,非常感谢大家.
    只要在循环外写一个
    Tread.Sleep(10),就肯定没有问题了。