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





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
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);?Me equivoque es:
int numAle=(int)(Math.random()*100);la unica diferencia es que lo numeros aleatorios los vas almacenando en la variable numAle que has creado
Gracias muy util…
me puedes ayudar en subir datos desde excel a java
me fue muy útil la información. se te agradece amigo!
Gracias por la aportación es muy útil también lo que comentó AngelFire. Gracias
Gracias loco me re sirvio
como puedo hacer para generar los numeros entre cierto rango??? como por ejemplo entre -100 y 100
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");
}
}
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);
sorry es
System.out.println(r.nextInt(max+1-min)+min);
numeros de 10-100 quedaria asi
Random r = new Random();
r.setSeed(new Date().getTime());
System.out.println(r.nextInt(91)+10);
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 .
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
}
}
}
}
Perdon por hacer tan largo el programa con los comentarios esque estoy aprendiendo programacion y asi maso se para que sirve cada cosa
Lo único que tienes que hacer es generar un número aleatorio donde declaras el número a adivinar… por ejemplo:
int a=new Random().nextInt(1000);// genera un número del uno al 1000