-1

这是一些简单的代码来显示我的问题:

 void method()
 {
   for(int i = 0;i<=99)
   {
     method1();
     method2();
   }
  }

void method1()
{
    if(Randombool())
    {
        bool exists = true;
        int n;
        while(exists)
        {
            n=RandNum(100);
            exists = list1.Exists(num => num == n);
        }
        list1.add(n);
    }
}

void method2()
{
    int n;
    bool exists = true;
    bool exists2 = true;
    while(!(exists && !exists2))
    {
        n = RandNum(100);
        exists = list1.Exists(elem => elem == n);
        exists2 = list2.Exists(elem => elem == n);
    }
    list2.add(n)
}

很明显它会在方法2的while循环中停留很长时间。

有没有更温和的方法来生成数字,这样我就可以避免等待?

4

1 回答 1

5

似乎您正在尝试生成 N 个数字的随机序列。您在这里使用的方法是获取一个随机数,如果它是您已经拥有的,则将其丢弃。

你想要做的是随机播放一个可以合理有效地完成的数组。只需按顺序用 0, 1, 2, ... 填充列表,然后随机播放。

从上面的链接复制的伪代码:

To shuffle an array a of n elements (indices 0..n-1):
  for i from n − 1 downto 1 do
       j ← random integer with 0 ≤ j ≤ i
       exchange a[j] and a[i]
于 2012-05-25T21:00:22.530 回答