2012-05-25 2 views
-1

Вот некоторые простой код, чтобы показать мою проблему:количество Генерирование зависит от 2-х списков

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) 
} 

Ну это очевидно, что это будет застрял в while петле из method2 в течение длительного времени.

Есть ли более нежный метод генерации чисел, поэтому я могу избежать ожидания?

+0

Является ли это мне, или делает ваш код только петлю в 100 раз, и вы ищете 200 уникальных номеров и ваш RandNum генерирует только от 0 до 100. Этот код не работа. У вас есть некоторые логические ошибки. Если бы это сработало, я бы посоветовал использовать хэш-таблицу (http://msdn.microsoft.com/en-us/library/system.collections.hashtable.aspx) для хранения номеров, и поиск будет быстрым. – CrazyDart

+0

Я думаю, что ваша логика ошибочна. – whd

+0

Хммм, тролль? Ваш код даже не действителен C#. – CrazyDart

ответ

5

Кажется, вы пытаетесь создать случайную последовательность из N чисел. Подход, который вы используете здесь, состоит в том, чтобы получить случайное число, а затем отбросить его, если он уже есть.

Что вы хотите сделать, это Shuffle an Array, что можно сделать достаточно эффективно. Просто заполните список 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] 
+0

его не то, что я хочу сделать, проверьте мой обновленный пост – whd

Смежные вопросы