2009-06-17 4 views
6

Sto provando a generare un numero casuale diverso ogni volta che il mio metodo RandomNumber viene chiamato dal mio ciclo for. In questo momento, restituisce lo stesso numero ogni volta.Il metodo RandomNumber restituisce lo stesso numero ogni volta chiamato

Questo è il mio metodo RandomNumber:

private int RandomNumber(int min, int max) 
    { 
     Random random = new Random(); 
     return random.Next(min, max); 
    } 

Questo è il contesto che sto usando in: (è un po 'disordinato, solo perché mi è stato pasticciano con il tentativo di farlo funzionare ....)

 for (int i = 0; i < charsRaw.Length; i++) 
     { 
      int max = charsRaw.Length - 1; 
      int rand = 0; 
      rand = RandomNumber(0, max); 

      charsNew[i] = charsRaw[rand]; 
      text2 += charsNew[i]; 

     } 

Non riesco a ottenere che restituisca un valore diverso ogni volta che viene chiamato con il ciclo for.

Sebbene, quando inserisco un MessageBox.Show (rand.ToString()) dopo text2 + = charsNew [i], mi dà ogni volta un valore diverso e funziona come volevo. Strano.

Grazie! Eric

risposta

17

Istanziare casuale una volta. Chiama .Next() più volte nella stessa istanza.

MSDN:

La generazione di numeri casuali inizia da un valore di inizializzazione. Se lo stesso seme è usato ripetutamente, la stessa serie di numeri viene generato

Se non desidera più volte istanziare a caso, utilizzare un seme diverso ogni volta.

+0

Grazie! Questo ha funzionato! – Eric

+4

L'ultimo paragrafo è un po 'fuorviante. new Random() fa esattamente questo, cioè semina il generatore con l'ora corrente. Dato che lo fai in un ciclo stretto, stai ricevendo molte istanze identiche che, ovviamente, producono sequenze identiche. Seminare manualmente con l'ora attuale non serve a migliorare le cose qui. Inoltre, otterrai una dipendenza lineare nei semi che è una cosa negativa per la casualità nella maggior parte dei generatori (http://portal.acm.org/citation.cfm?doid=1276927.1276928) – Joey

+0

buona chiamata. modifico – anthony

1

Non c'è niente che dice che una sequenza veramente casuale non può essere lo stesso numero ogni volta! :-) C'è una piccola probabilità che sia legittima, quindi non puoi mai essere veramente sicuro. anatre per copertura

+0

http://web.archive.org/web/20011027002011/http://dilbert.com/comics/dilbert/archive/images/dilbert2001182781025.gif –