2015-07-01 1 views
5

Quindi ecco il codice che ho usato. È solo un semplice programma da testare per vedere se 3 numeri generati casualmente sono in ordine ascendente o discendente. Per qualche ragione se sto usando il debugger e passo in ogni riga, allora il codice funziona correttamente. In caso contrario, si dice che i numeri sono in ordine 100% o fuori servizio al 100%, il che non dovrebbe essere il caso.Il codice C# funziona solo quando si utilizza il debugger?

Ecco il codice che ho usato:

 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(); 

Penso che potrebbe essere un problema con la pseudo casuale e il codice che genera gli stessi 3 numeri ogni volta, ma sto ancora imparando maggiori informazioni sulla programmazione e altri aiuti sarebbero molto apprezzati.

risposta

8

Il costruttore new Random() utilizza l'ora corrente come seme.

A meno che non si aspetti il ​​debugger, tutte le istanze di Random hanno lo stesso seme.

È necessario utilizzare una singola istanza.

5

Questo ha a che fare con come vengono generati i numeri casuali.

Se si prende

Random rnd = new Random(); 

e spostarla fuori dal giro, si dovrebbe vedere i risultati desiderati.

più di fondo:

Il generatore di numeri casuali utilizza un seme in base al tempo si crea un'istanza di esso. Poiché il tuo codice funziona così velocemente, il seme è lo stesso, quindi i numeri sono gli stessi. Questo è il motivo per cui funziona quando passi.

L'istanziazione del casuale al di fuori del ciclo lo istanzia da una volta e utilizza l'algoritmo casuale per generare nuovi numeri.