2009-06-17 8 views
6

Estoy intentando generar un número aleatorio diferente cada vez que se llama a mi método RandomNumber desde mi ciclo for. En este momento, devuelve el mismo número cada vez.El método RandomNumber devuelve el mismo número cada vez llamado

Este es mi método RandomNumber:

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

Este es el contexto lo estoy usando en: (es un poco desordenado sólo porque he estado jugando con tratar de conseguir que funcione ....)

 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]; 

     } 

Parece que no puedo obtener un valor diferente cada vez que se invoca con el ciclo for.

Aunque, cuando pego un MessageBox.Show (rand.ToString()) después de text2 + = charsNew [i], me da un valor diferente cada vez y funciona de la manera que pretendía. Extraño.

Gracias! Eric

Respuesta

17

Crear una instancia aleatoria una vez. Llamar .Next() varias veces en la misma instancia.

MSDN:

La generación de números aleatorios comienza de un valor de semilla. Si la misma semilla es utilizado en varias ocasiones, se genera la misma serie de números

Si desea crear una instancia aleatoria en varias ocasiones, utiliza una semilla diferente cada vez.

+0

Gracias! Esto funcionó! – Eric

+4

El último párrafo es un poco engañoso. nuevo Random() hace exactamente eso, es decir, sembrando el generador con la hora actual. Como haces esto dentro de un circuito cerrado, obtienes muchas instancias idénticas que, por supuesto, producen secuencias idénticas. La siembra manual con la hora actual no sirve para mejorar las cosas aquí. Además, obtendrás prácticamente una dependencia lineal en las semillas, lo cual es malo para la aleatoriedad en la mayoría de los generadores (véase http://portal.acm.org/citation.cfm?doid=1276927.1276928) – Joey

+0

. voy a editar – anthony

1

¡No hay nada que diga que una secuencia verdaderamente aleatoria no puede ser el mismo número cada vez! :-) Hay una pequeña probabilidad de que sea de fiar, así que nunca puedes estar realmente seguro. patos para cubrir

+0

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

Cuestiones relacionadas