Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Jess_Kapria en 31 Julio 2007, 19:57 pm



Título: Las semillas de Random (una aclaración por favor)
Publicado por: Jess_Kapria en 31 Julio 2007, 19:57 pm
Hola , pues un amigo me ha pasado una aplicación para que fuera acostumbrándome al uso de la clase Random y hay una cosilla que no entiendo . Os pongo akí el programilla para que entendais mejor la pregunta que quiero hacer:

Código
  1. import java.util.Random;
  2. public class aleatorio {
  3. private Random r;
  4. public aleatorio() {
  5. r=new Random();
  6. r.setSeed(1234);
  7. }
  8. public int generarAleatorio() {
  9. int n=r.nextInt(1000);
  10. return n;
  11. }
  12. }

Mi duda está en --> r.setSeed(1234); , bueno leyendo por ahí he comprendido que para que se genere un número aleatorio es recomendable utilizar y darle una longitud de semilla. Pero he leído por ahí que hay unos valores por defecto que se introducen como el 1234 , pero lo que no me ha quedado claro (y espero que nadie se ría por favor , pero llevo mucho rato buscando, y no me aclaro  :-( :-() es que quiere decir ese 1234 , es decir entre cuantos numeros aleatorios busca , entre 1234  :huh: :huh:

Vamos que no sé , la verdad que acabo de volver a retomar Java por motivos de trabajo y la verdad que estoy muy perdida  porque estoy viendo cosas que no sabía ni que existían y estoy muy acojonada.

Yo seguiré investigando , leyendo , ya me he comprado dos libros (que lastimosamente no me están sirviendo de mucho , porque sólo hablan de cosas muy básicas , como declaración de variables , estructuras de control, vamos lo típico de todos los libros que te dicen cuando empiezas con un nuevo lenguaje.

Sabeis de algún lugar donde pueda encontrar libros más extensos y que profundicen más en temas más complicados  :huh: :huh:

Ah , y que tal está La biblia de Java que es un buen tocho , es que lo ví el otro día y no sé si comprarmelo , antes quería saber vuestra opinión.

Bueno espero que alguien me pueda ayudar  ;) ;)

Saludos ,  :xD


Título: Re: Las semillas de Random (una aclaración por favor)
Publicado por: Casidiablo en 1 Agosto 2007, 00:27 am
Lo primero que es necesario que entiendas, es que con la clase Random se generan números pseudo-aleatorios, por tal motivo (y si has probado el ejemplo que te pasaron) siempre que corras el programa te va a salir exactamente el mismo número aleatorio (a menos de que cambies la semilla), o la misma secuencia. Esto se puede observar en el propio método:

Código
  1.  synchronized public void setSeed(long seed) {
  2.       this.seed = (seed ^ 0x5DEECE66DL) & ((1L << 48) - 1);
  3.       haveNextNextGaussian = false;
  4. }

La manera más fácil (desde mi punto de vista) de generar números aleatorios (NO pseudo-aleatorios), es utilizar el método setSeed de la siguiente manera:

Código
  1. import java.util.*;
  2. public class aleatorio {
  3. private Random r;
  4. public aleatorio() {
  5. r=new Random();
  6. r.setSeed(new Date().getTime());
  7. }
  8. public int generarAleatorio() {
  9. int n=r.nextInt(1000);
  10. return n;
  11. }
  12. }

Así, la semilla cambiará cada vez que se ejecute el programa, y por ende los números sí serán aleatorios (al menos en la práctica).

Un saludo!!!


Título: Re: Las semillas de Random (una aclaración por favor)
Publicado por: Jess_Kapria en 1 Agosto 2007, 16:36 pm
Gracias Casidiablo me ha servido mucho tu explicación , algún libro que me recomiendes  :huh: :huh:

Saludos ,  :xD


Título: Re: Las semillas de Random (una aclaración por favor)
Publicado por: Yshua en 1 Agosto 2007, 18:15 pm
hay uno, de los mejores para empezar, "Aprenda java como si estubiera en primero", si lo pones en google lo encuentras fácil


Título: Re: Las semillas de Random (una aclaración por favor)
Publicado por: egyware en 1 Agosto 2007, 22:04 pm
mira no se usar esa clase pero cuando programaba en qbasic la semilla le daba como valor el tiempo transcurrido desde las doce de la noche (un comando especial de qbasic) pueder usar un equivalente en java (no se si habra pero puedes invertarlo) prueba xau xau