Numeros Random

28/09/2007 - 17:00 por Robert Barreiro | Informe spam
Buenas, que tal?

Estoy haciendo una aplicacion que debe generar números al azar (que luego
van a representar barajas) y las mismas se generan todas dentro de un bucle
while. Estoy utilizando

Random randGen = new Random(Convert.ToInt32(DateTime.Now.Ticks &
0x000000007FFFFFFF));

con la intención de que los numeros generados sean lo suficientemente
aleatorios pero la verdad la generación es tan rápida que muchas veces me
genera los mismos valores o varios de ellos son iguales y luego cambian,
etc. Incluso le agergué un System.Threading.Thread.Sleep(50); con la
intención de que espere un poco antes de generar el nuevo valor, pero el
cmoportamiento sigue sin ser bueno y no quiero aumentar el valor del Sleep a
100 o mas.

Alguno conoce alguna manera de generar verdaderos numeros al azar y que no
tenga problemas al generar una serie de números muy rápido?


Agradezco mucho su respuesta.


Saludos,



Robert.

Preguntas similare

Leer las respuestas

#1 Guillermo guille
28/09/2007 - 18:10 | Informe spam
El valor ese que le indicas en el constructor es solo para la semilla del
generador.
Por tanto, no deberías estar creando objetos nuevos dentro del bucle.
Crea un objeto Random al principio, usando ese código si quieres, para que
la semilla sea distinta, pero después simplemente usa los métodos de la
clase para generar el número.

Recuerda que esa semilla es la que indica que la serie no será la misma
siempre... es decir, si siempre usaras una misma semilla, siempre debería
generar los mismos números.

Nos vemos
Guillermo

Microsoft MVP Visual Basic desde 1997
Tus consultas en los foros del Guille: http://foros.elguille.info/


"Robert Barreiro" wrote in message
news:
Buenas, que tal?

Estoy haciendo una aplicacion que debe generar números al azar (que luego
van a representar barajas) y las mismas se generan todas dentro de un
bucle while. Estoy utilizando

Random randGen = new Random(Convert.ToInt32(DateTime.Now.Ticks &
0x000000007FFFFFFF));

con la intención de que los numeros generados sean lo suficientemente
aleatorios pero la verdad la generación es tan rápida que muchas veces me
genera los mismos valores o varios de ellos son iguales y luego cambian,
etc. Incluso le agergué un System.Threading.Thread.Sleep(50); con la
intención de que espere un poco antes de generar el nuevo valor, pero el
cmoportamiento sigue sin ser bueno y no quiero aumentar el valor del Sleep
a 100 o mas.

Alguno conoce alguna manera de generar verdaderos numeros al azar y que no
tenga problemas al generar una serie de números muy rápido?


Agradezco mucho su respuesta.


Saludos,



Robert.

Respuesta Responder a este mensaje
#2 Robert Barreiro
28/09/2007 - 22:24 | Informe spam
Ahhh, te entendí, te entendí. Bien ahi!!! :)

Grande Guille. Muchas gracias por la info.



Saludos!!




"Guillermo 'guille'" escribió en el mensaje
news:
El valor ese que le indicas en el constructor es solo para la semilla del
generador.
Por tanto, no deberías estar creando objetos nuevos dentro del bucle.
Crea un objeto Random al principio, usando ese código si quieres, para que
la semilla sea distinta, pero después simplemente usa los métodos de la
clase para generar el número.

Recuerda que esa semilla es la que indica que la serie no será la misma
siempre... es decir, si siempre usaras una misma semilla, siempre debería
generar los mismos números.

Nos vemos
Guillermo

Microsoft MVP Visual Basic desde 1997
Tus consultas en los foros del Guille: http://foros.elguille.info/


"Robert Barreiro" wrote in message
news:
Buenas, que tal?

Estoy haciendo una aplicacion que debe generar números al azar (que luego
van a representar barajas) y las mismas se generan todas dentro de un
bucle while. Estoy utilizando

Random randGen = new Random(Convert.ToInt32(DateTime.Now.Ticks &
0x000000007FFFFFFF));

con la intención de que los numeros generados sean lo suficientemente
aleatorios pero la verdad la generación es tan rápida que muchas veces me
genera los mismos valores o varios de ellos son iguales y luego cambian,
etc. Incluso le agergué un System.Threading.Thread.Sleep(50); con la
intención de que espere un poco antes de generar el nuevo valor, pero el
cmoportamiento sigue sin ser bueno y no quiero aumentar el valor del
Sleep a 100 o mas.

Alguno conoce alguna manera de generar verdaderos numeros al azar y que
no tenga problemas al generar una serie de números muy rápido?


Agradezco mucho su respuesta.


Saludos,



Robert.




Respuesta Responder a este mensaje
#3 Guillermo guille
30/09/2007 - 23:18 | Informe spam
Acabo de publicar un artículo sobre este tema, ya que ese tipo de "fallo" es
muy común:
http://www.elguille.info/NET/dotnet..._Next.aspx


Nos vemos
Guillermo

Microsoft MVP Visual Basic desde 1997
Tus consultas en los foros del Guille: http://foros.elguille.info/


"Robert Barreiro" wrote in message
news:u%
Ahhh, te entendí, te entendí. Bien ahi!!! :)

Grande Guille. Muchas gracias por la info.



Saludos!!




"Guillermo 'guille'" escribió en el mensaje
news:
El valor ese que le indicas en el constructor es solo para la semilla del
generador.
Por tanto, no deberías estar creando objetos nuevos dentro del bucle.
Crea un objeto Random al principio, usando ese código si quieres, para
que la semilla sea distinta, pero después simplemente usa los métodos de
la clase para generar el número.

Recuerda que esa semilla es la que indica que la serie no será la misma
siempre... es decir, si siempre usaras una misma semilla, siempre debería
generar los mismos números.

Nos vemos
Guillermo

Microsoft MVP Visual Basic desde 1997
Tus consultas en los foros del Guille: http://foros.elguille.info/


"Robert Barreiro" wrote in message
news:
Buenas, que tal?

Estoy haciendo una aplicacion que debe generar números al azar (que
luego van a representar barajas) y las mismas se generan todas dentro de
un bucle while. Estoy utilizando

Random randGen = new Random(Convert.ToInt32(DateTime.Now.Ticks &
0x000000007FFFFFFF));

con la intención de que los numeros generados sean lo suficientemente
aleatorios pero la verdad la generación es tan rápida que muchas veces
me genera los mismos valores o varios de ellos son iguales y luego
cambian, etc. Incluso le agergué un System.Threading.Thread.Sleep(50);
con la intención de que espere un poco antes de generar el nuevo valor,
pero el cmoportamiento sigue sin ser bueno y no quiero aumentar el valor
del Sleep a 100 o mas.

Alguno conoce alguna manera de generar verdaderos numeros al azar y que
no tenga problemas al generar una serie de números muy rápido?


Agradezco mucho su respuesta.


Saludos,



Robert.








Respuesta Responder a este mensaje
#4 Robert Barreiro
01/10/2007 - 17:01 | Informe spam
Buenísimo!!

Gracias Guille!! Anduvo al pelo :)




"Guillermo 'guille'" escribió en el mensaje
news:
Acabo de publicar un artículo sobre este tema, ya que ese tipo de "fallo"
es muy común:
http://www.elguille.info/NET/dotnet..._Next.aspx


Nos vemos
Guillermo

Microsoft MVP Visual Basic desde 1997
Tus consultas en los foros del Guille: http://foros.elguille.info/


"Robert Barreiro" wrote in message
news:u%
Ahhh, te entendí, te entendí. Bien ahi!!! :)

Grande Guille. Muchas gracias por la info.



Saludos!!




"Guillermo 'guille'" escribió en el mensaje
news:
El valor ese que le indicas en el constructor es solo para la semilla
del generador.
Por tanto, no deberías estar creando objetos nuevos dentro del bucle.
Crea un objeto Random al principio, usando ese código si quieres, para
que la semilla sea distinta, pero después simplemente usa los métodos de
la clase para generar el número.

Recuerda que esa semilla es la que indica que la serie no será la misma
siempre... es decir, si siempre usaras una misma semilla, siempre
debería generar los mismos números.

Nos vemos
Guillermo

Microsoft MVP Visual Basic desde 1997
Tus consultas en los foros del Guille: http://foros.elguille.info/


"Robert Barreiro" wrote in message
news:
Buenas, que tal?

Estoy haciendo una aplicacion que debe generar números al azar (que
luego van a representar barajas) y las mismas se generan todas dentro
de un bucle while. Estoy utilizando

Random randGen = new Random(Convert.ToInt32(DateTime.Now.Ticks &
0x000000007FFFFFFF));

con la intención de que los numeros generados sean lo suficientemente
aleatorios pero la verdad la generación es tan rápida que muchas veces
me genera los mismos valores o varios de ellos son iguales y luego
cambian, etc. Incluso le agergué un System.Threading.Thread.Sleep(50);
con la intención de que espere un poco antes de generar el nuevo valor,
pero el cmoportamiento sigue sin ser bueno y no quiero aumentar el
valor del Sleep a 100 o mas.

Alguno conoce alguna manera de generar verdaderos numeros al azar y que
no tenga problemas al generar una serie de números muy rápido?


Agradezco mucho su respuesta.


Saludos,



Robert.











Respuesta Responder a este mensaje
#5 Harvey Triana
01/10/2007 - 18:05 | Informe spam
Elegante. Me gusto la naturaleza de la redacción *. Supongo que por ser solo
un ejemplo la función cadenaAleatoria tiene un conjunto de caracteres tan
reducido. La función que publico a continuación me gusta por la versatilidad
del conjunto de caracteres, y el tratamiento por el indice del array (cosa
que poco se ve en VB). La iniciación de la semilla es como nos explicaste:



public static string RandomizeString(int Size)

{

const string SCANSTRING =
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

StringBuilder sb = new StringBuilder();



for (int i = 0; i < Size; i++)

{

sb.Append(SCANSTRING[rnd.Next(0, SCANSTRING.Length - 1)]);

}

return sb.ToString();

}



<Harvey Triana />



"Guillermo 'guille'" escribió en el mensaje
news:
Acabo de publicar un artículo sobre este tema, ya que ese tipo de "fallo"
es muy común:
http://www.elguille.info/NET/dotnet..._Next.aspx


Nos vemos
Guillermo

Microsoft MVP Visual Basic desde 1997
Tus consultas en los foros del Guille: http://foros.elguille.info/


"Robert Barreiro" wrote in message
news:u%
Ahhh, te entendí, te entendí. Bien ahi!!! :)

Grande Guille. Muchas gracias por la info.



Saludos!!




"Guillermo 'guille'" escribió en el mensaje
news:
El valor ese que le indicas en el constructor es solo para la semilla
del generador.
Por tanto, no deberías estar creando objetos nuevos dentro del bucle.
Crea un objeto Random al principio, usando ese código si quieres, para
que la semilla sea distinta, pero después simplemente usa los métodos de
la clase para generar el número.

Recuerda que esa semilla es la que indica que la serie no será la misma
siempre... es decir, si siempre usaras una misma semilla, siempre
debería generar los mismos números.

Nos vemos
Guillermo

Microsoft MVP Visual Basic desde 1997
Tus consultas en los foros del Guille: http://foros.elguille.info/


"Robert Barreiro" wrote in message
news:
Buenas, que tal?

Estoy haciendo una aplicacion que debe generar números al azar (que
luego van a representar barajas) y las mismas se generan todas dentro
de un bucle while. Estoy utilizando

Random randGen = new Random(Convert.ToInt32(DateTime.Now.Ticks &
0x000000007FFFFFFF));

con la intención de que los numeros generados sean lo suficientemente
aleatorios pero la verdad la generación es tan rápida que muchas veces
me genera los mismos valores o varios de ellos son iguales y luego
cambian, etc. Incluso le agergué un System.Threading.Thread.Sleep(50);
con la intención de que espere un poco antes de generar el nuevo valor,
pero el cmoportamiento sigue sin ser bueno y no quiero aumentar el
valor del Sleep a 100 o mas.

Alguno conoce alguna manera de generar verdaderos numeros al azar y que
no tenga problemas al generar una serie de números muy rápido?


Agradezco mucho su respuesta.


Saludos,



Robert.











Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida