Alguien me lo explique por favor

21/05/2007 - 21:27 por Roberto Palacios | Informe spam
Buenas, necesito generar números aleatorios entre 0 y uno y para ello uso el
siguiente código:
while (contador<duplicaciones+1)

{

Random dado = new Random();

double aleatorio=dado.NextDouble();

aleatorios.Add(aleatorio);

...

}

Luego, fuera del while, recorro el vector para ver los aleatorios (los
escribo en un txt) y resulta que los valores del vector son todos iguales,
el mismo número. Ante dicha situación pongo un breakpoint en el while, y
cualmí sorpresa que al ejecutar paso a paso todo se realiza perfecto,
distintos números aleatorios al final en el vector. Repito la opoeración sin
el breakpoint y vuelvo a tener todos los elementos repes. En el while no se
vuelve a tocar el vecto, solo esa instrucción Add, y fuera solo lo recorro
para escribirlo en el txt.

¿Alguien puede explicarme esto?



Un saludo a todos

Roberto

Preguntas similare

Leer las respuestas

#1 RFOG
21/05/2007 - 21:39 | Informe spam
Aisss.

EL generador de números aleatorios del PC es un pseudogenerador, por lo
que si no indicas nada siempre empezará por el mismo sitio.

Random r=new Random(<seed>)
while(contador<(dupilcaciones+1)
aleatorios.Add(r.NextDouble();

...


En el bucle estás incializando un generador cada vez, sin especificar
semilla, por lo que siempre empezará por el mismo sitio Aparte de que
estás creando una infinitud de objetos sin mucho sentido que luego el
recolector de basura se volverá loco a la hora de recuperarlos.

Por cierto, si te lees la documentación sería mejor...

En Mon, 21 May 2007 21:27:40 +0200, Roberto Palacios
escribió:

Buenas, necesito generar números aleatorios entre 0 y uno y para ello
uso el
siguiente código:
while (contador<duplicaciones+1)

{

Random dado = new Random();

double aleatorio=dado.NextDouble();

aleatorios.Add(aleatorio);

...

}

Luego, fuera del while, recorro el vector para ver los aleatorios (los
escribo en un txt) y resulta que los valores del vector son todos
iguales,
el mismo número. Ante dicha situación pongo un breakpoint en el while, y
cualmí sorpresa que al ejecutar paso a paso todo se realiza perfecto,
distintos números aleatorios al final en el vector. Repito la opoeración
sin
el breakpoint y vuelvo a tener todos los elementos repes. En el while no
se
vuelve a tocar el vecto, solo esa instrucción Add, y fuera solo lo
recorro
para escribirlo en el txt.

¿Alguien puede explicarme esto?



Un saludo a todos

Roberto









Visita mi blog principal: http://rfog.blogsome.com
Y este sobre programación: http://geeks.ms/blogs/rfog
Libros, ciencia ficción y programación
El que dé rosas de comer al burro, cobrará con un rebuzno.
Respuesta Responder a este mensaje
#2 Alberto Poblacion
21/05/2007 - 22:52 | Informe spam
Cuando haces Random dado = new Random(); el generador de números aleatorios
se reinicializa con una semilla que depende de la hora. Si lo ejecutas en un
bucle, el bucle va tan rápido que la hora es siempre la misma y por eso el
generador arranca siempre desde el mismo número. Cuando lo haces paso a
paso, da tiempo a que cambie la hora, y por eso salen números distintos.

El remedio es sacar el "new" de dentro del bucle:

Random dado = new Random();
while (contador<duplicaciones+1)
{
double aleatorio=dado.NextDouble();
aleatorios.Add(aleatorio);
...
}
Respuesta Responder a este mensaje
#3 Alfredo Novoa
22/05/2007 - 00:25 | Informe spam
Hola,

On Mon, 21 May 2007 21:39:34 +0200, RFOG
wrote:

EL generador de números aleatorios del PC es un pseudogenerador,



Hombre, el generador es un generador de verdad, pero de números
pseudoaleatorios :-)

por lo
que si no indicas nada siempre empezará por el mismo sitio.



Tampoco tendría por que ser así necesariamente. Si les hubiese dado la
gana, podrían haber hecho que el constructor por defecto cogiese como
semilla el valor del "timer" o algo parecido. Aunque está mejor como
está.

Por cierto, si te lees la documentación sería mejor...



Pues si, y también las normas de etiqueta de los grupos. Por ejemplo
los títulos de los hilos deben de ser descriptivos, y antes de
preguntar hay que buscar la respuesta por uno mismo.


Saludos
Respuesta Responder a este mensaje
#4 Alfredo Novoa
22/05/2007 - 00:30 | Informe spam
On Tue, 22 May 2007 00:25:27 +0200, Alfredo Novoa
wrote:


Tampoco tendría por que ser así necesariamente. Si les hubiese dado la
gana, podrían haber hecho que el constructor por defecto cogiese como
semilla el valor del "timer" o algo parecido. Aunque está mejor como
está.



Ah, coño pues si es así como les dió la gana :-)

Por cierto, si te lees la documentación sería mejor...





Pues si, tendría que habérmela leido antes :-)


Saludos
Respuesta Responder a este mensaje
#5 principiante
22/05/2007 - 06:10 | Informe spam
Te clonaron o te estás respondiendo vos mismo?


"Alfredo Novoa" escribió en el mensaje
news:
On Tue, 22 May 2007 00:25:27 +0200, Alfredo Novoa
wrote:


Tampoco tendría por que ser así necesariamente. Si les hubiese dado la
gana, podrían haber hecho que el constructor por defecto cogiese como
semilla el valor del "timer" o algo parecido. Aunque está mejor como
está.



Ah, coño pues si es así como les dió la gana :-)

Por cierto, si te lees la documentación sería mejor...





Pues si, tendría que habérmela leido antes :-)


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