2013-06-07 17 views
7

Ho fornito un semplice codice che emetterà 10 cifre casuali tra 0 e 100. Quando eseguo questo in Visual Studio (C#) usando F5, ottengo il lo stesso numero 10 volte. Tuttavia, se lo eseguo attraverso la modalità di debug, riga per riga usando F10 o F11, ottengo 10 numeri diversi (potrebbero non essere tutti diversi ma sono randomizzati).L'esecuzione di un programma mi dà risultati diversi dalla modalità di debug

public static void rand() { 
    for (int j = 0; j < 10; j++) { 
     Random r = new Random(); 
     Console.WriteLine(r.Next(100)); 
    } 
} 

so come risolvere il problema, che è istanziando r a caso al di fuori del ciclo e la copia per riferimento, ma vorrei capire perché questo sta accadendo. Sto pensando che questo abbia qualcosa a che fare con il seed ma il programma funziona mentre è in esecuzione in modalità debugging che mi confonde.

Inoltre, ora mi sto chiedendo se avrò sempre bisogno di verificare se la modalità di debugging mi sta dando i risultati giusti.

+0

Prova dichiarando tuoi casuale * fuori * il ciclo –

+0

Grazie per il suggerimento, ma ho già detto che nel post –

risposta

10

È necessario creare Random istanze e prima del ciclo.

public static void rand() { 
    Random r = new Random(); 
    for (int j = 0; j < 10; j++) {   
     Console.WriteLine(r.Next(100)); 
    } 
} 

E 's here la spiegazione:

... Il valore di inizializzazione di default è derivato dal clock di sistema ed ha una risoluzione finita. Di conseguenza, diversi oggetti casuali creati in stretta successione da una chiamata al costruttore predefinito avranno identici valori di inizializzazione predefiniti e, pertanto, genereranno serie identiche di numeri casuali. Questo problema può essere evitato usando un singolo oggetto casuale per generare tutti i numeri casuali. ...

Se si desidera utilizzare diversi Random casi Si dovrebbe utilizzare diversi seed valori. Per esempio j variabile:

public static void rand() 
{ 
    for(int j = 0; j < 10; j++) 
    { 
      Random r = new Random(j); 
      Console.WriteLine(r.Next(100)); 
    } 
} 

rispondere alla tua domanda: ... se avrò sempre bisogno di testare se la modalità di debug mi sta dando i risultati giusti.

No, non è necessario mettere in dubbio i risultati della modalità di debug. Hanno ragione. Sbagliato può essere la vostra comprensione di loro.

+8

Questo è ciò che il costruttore a caso appare come se si guarda ad essa con riflettore: 'pubblica Random(): questo (Environment.TickCount) {} ' –

Problemi correlati