gentoo linux, java, software libre y otras hierbas
jul, 31 2007 - 7:18 pm

Aclaración: Generar números aleatorios en Java con la clase Random

Antes que nada, veamos un pequeño ejemplo del uso de la clase Random, para ver su funcionamiento básico:

import java.util.*;
public class NumerosAleatorios
{
public static void main(String args[])
{
Random r=new Random();
r.setSeed(123456789);
System.out.println(r.nextInt(1000));
}
}

Como puedes observar, después de crear el objeto Random, es necesario utilizar el método setSeed(long) para establecer la semilla a partir de la cual se generarán números aleatorios (pseudo-aleatorios)… fíjate como le pasamos un número(que puede ser cualquiera, en formato long logicamente [obviando o no el sufijo L]), que representará la semilla.

Lo primero que es necesario entender, es que con la clase Random se generan números pseudo-aleatorios, por tal motivo siempre que corras el programa te va a salir exactamente el mismo número aleatorio o la misma secuencia (a menos de que se cambie la semilla). Esto se puede observar en el propio método setSeed:

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

Entonces… ¿cuál es la solución para generar números realmente aleatorios con la clase Random? El método más sencillo para hacer esto, es insertar un valor en la semilla (en el método setSeed) que cambie cada vez que se ejecute el programa, y el más adecuado es la hora. Por obvios motivos, cada vez que ejecutas un programa la hora y fecha ha cambiado, entonces podemos usar nuestro programa de la siguiente forma:

import java.util.*;
public class aleatorio
{
public static void main(String args[])
{
Random r;
r=new Random();
r.setSeed(new Date().getTime());
System.out.println(r.nextInt(1000));
}
}

De ésta manera la semilla cambiará cada vez que ejecutemos el programa.

18 Comentarios | deja el tuyo

18 Comentarios en “Aclaración: Generar números aleatorios en Java con la clase Random”

  1. christian dice:

    me puedes ayudar con un codigo en java que de 3 archivos txt tome datos aleatorios de cada uno por ejemplo en el primer archivo txt tenga una lista de nombres y q de ahi escoja 1 solo nobre y en el otro archivo txt tenga un listado de apellidos y que tome un apellido y asi sucesivamente me pudees ayudar ojala puedas ayudarme te dejo mi correo gracias chris_toty@hotmail.com

  2. Angelfire dice:

    Parce ahi disculpará la ignorancia, pero que tiene de diferente generar números aleatorios con el método que ud acaba de explicar a generarlos por ejemplo:
    int numAl=(num)(Math.random()*100);?

  3. Angelfire dice:

    Me equivoque es:
    int numAle=(int)(Math.random()*100);

  4. Joam dice:

    Gracias muy util…

  5. CLARA dice:

    me puedes ayudar en subir datos desde excel a java

  6. jluis dice:

    me fue muy útil la información. se te agradece amigo!

  7. alberto dice:

    Gracias por la aportación es muy útil también lo que comentó AngelFire. Gracias

  8. Javier dice:

    Gracias loco me re sirvio

  9. Enrique dice:

    como puedo hacer para generar los numeros entre cierto rango??? como por ejemplo entre -100 y 100

  10. Karol dice:

    Me pueden ayudar quiero generar 10 numeros aletorios en un rango de 10 a 100 solamente: use este codigo pero solo me imprime numeros del rango pero no necesariamente 10 numeros:
    for(int i=0;i=10&&a[i]<=100){
    System.out.print(a[i]+"\t");
    }
    }

  11. Andres.lobos dice:

    facil po para generar entre un rango debes sumarle el menor al resultado del random de la resta del mayor con el menor y listo si quieres entre 10 y 100 pones

    r.setSeed(new Date().getTime());

    System.out.println(r.nextInt(100-10)+10);
    esto te generara numeros entre 0 y 90 pero al resultado le suma 10 entonces si obtuvieras el numero 0 le suma 10 y obtienes 10 como minimo. y si sacas el mayor que seria 90 le suma 10 y queda en 100 en el fondo es:

    System.out.println(r.nextInt(max-min)+min);

  12. andres.lobos dice:

    sorry es
    System.out.println(r.nextInt(max+1-min)+min);

    • andres.lobos dice:

      numeros de 10-100 quedaria asi

      Random r = new Random();
      r.setSeed(new Date().getTime());
      System.out.println(r.nextInt(91)+10);

  13. yuli dice:

    hola necesito0 ayuda para elaborar una clase donde : genere 10 números en un rango de 0 a 50. Obtenidos estos números poder elegir un número para que me imprima su sucesor y su antecesor .

  14. byron14x dice:

    Hola amigo esta muy bien tu info me podrias ayudar un poco porfa hize un juego que te deja salir del juego si aciertas el numero lo malo esque le insertas tu mismo el numero y eso no tiene sentido como podria poner este codigo al mio public class Juego {
    public static void main (String[] args) throws IOException {

    int a=2000;
    int numero;

    BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
    // Para leer el teclado
    System.out.println(“Ingrese un número para jugar: “);
    numero= Integer.parseInt(teclado.readLine());
    // El valor que vamos a buscar

    while (a!=numero){
    System.out.println(“Ingrese número : “);
    a= Integer.parseInt(teclado.readLine());
    // con este bucle estamos repitiendo todo el mismo procedimiento hasta que
    //segun una condicion salga del juego

    if (a>numero){
    System.out.println(“Estas mas lejos del numero: “);
    // con el if estamos poniendo la condicion para que nos de el mensaje segun
    //nuestra condicion
    }

    if (a<numero){
    System.out.println("Estas mas cerca del numero: ");
    // con el if estamos poniendo la condicion para que nos de el mensaje segun
    // nuestra condicion
    }
    if(a==numero){
    System.out.print("Has ganado ");
    // esta condicion es para salir de nuestro juego

    }

    }
    }
    }

  15. byron14x dice:

    Perdon por hacer tan largo el programa con los comentarios esque estoy aprendiendo programacion y asi maso se para que sirve cada cosa

¡Déjanos tu comentario!