2015-07-01 2 views
5

Итак, вот код, который я использовал. Его просто простая программа для проверки, чтобы 3 случайно генерируемые числа находились в порядке возрастания или убывания. По какой-то причине, если я использую отладчик и вступаю в каждую строку, код работает правильно. Если нет, то он говорит, что цифры находятся в порядке 100% или не в порядке 100%, чего не должно быть.C# Code работает только при использовании отладчика?

Вот код, я использую:

 int num1; 
     int num2; 
     int num3; 

     int yes = 0; 
     int no = 0; 

     for (int i = 0; i <= 99; i++) 
     { 

      Random rnd = new Random(); 

      num1 = rnd.Next(1, 11); 
      num2 = rnd.Next(1, 11); 
      num3 = rnd.Next(1, 11); 

      if (((num1 <= num2) && (num2 <= num3)) || ((num1 >= num2) && (num2 >= num3))) 
      { 
       yes += 1; 
      } 

      else 
      { 
       no += 1; 
      } 

     } 


     Console.WriteLine("The Number are in ascending order " + yes.ToString() + " Times"); 
     Console.WriteLine("The Number are not in ascending order " + no.ToString() + " Times"); 

     Console.ReadLine(); 

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

ответ

8

Конструктор new Random() использует текущее время в качестве семени.

Если вы не подождали в отладчике, все ваши экземпляры Random имеют одинаковое семя.

Вы должны использовать один экземпляр.

5

Это связано с тем, как генерируются случайные числа.

Если вы

Random rnd = new Random(); 

и переместить его из петли, вы должны увидеть желаемые результаты.

Более фон:

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

Создание экземпляра Random вне цикла создаст его один раз и использует случайный алгоритм для генерации новых чисел.