Podemos generar números aleatorios en Java de dos formas
distintas:
1. Utilizando el método estático random
de la clase Math: Math.random()
2. Utilizando la clase Random
1. Generar números aleatorios utilizando Math.random()
El método random() de la clase Math devuelve un número al
azar positivo de tipo double mayor o igual que 0.0 y menor que 1.0
Por ejemplo, el siguiente for genera 5 números aleatorios
for(int i = 1; i<=5; i++){
System.out.println(Math.random());
}
genera 5 números aleatorios que podrían ser estos:
0.6586423340678433
0.35474701449674206
0.9552201267900652
0.8309552833908893
0.05210677512170114
Para obtener un número entero entre 1 y un
límite N, hay que multiplicar el número aleatorio obtenido por N, sumarle
1 y convertirlo a entero:
(int)(Math.random()*N + 1);
Por ejemplo, para obtener 5 números aleatorios enteros
entre 1 y 6:
for(int i = 1; i<=5; i++){
System.out.println((int)(Math.random()*6 + 1));
}
Para obtener con Math.random un número entero entre dos valores DESDE ,
HASTA, ambos incluidos, debemos usar la fórmula:
(int)(Math.random() * (HASTA - DESDE + 1) + DESDE);
Por ejemplo, para generar 5 números enteros al azar entre 8 y 15:
for(int i = 1; i<=5; i++){
System.out.println((int)(Math.random() * (15 - 8 + 1) + 8));
}
2. Generar números aleatorios utilizando la clase
Random
La clase Random
proporciona un generador de números aleatorios más flexible que el método
random de la clase Math anterior.
Se encuentra en el paquete java.util.
Para obtener un número aleatorio utilizando la clase
Random debes seguir estos pasos:
1.
Importar la clase: import java.util.Random;
2. Crear un objeto de la clase Random
3. Utilizar uno de los métodos de la clase para obtener el
número
Algunos
métodos de la clase Random:
nextInt() devuelve
un número entero positivo o negativo dentro del rango de enteros.
nextInt(int n) devuelve
un número entero >=0 y menor que n.
nextDouble() Devuelve un número positivo de tipo double mayor o igual que 0.0 y menor que 1.0
Por
ejemplo, para generar un número entero al azar:
Random rnd = new Random();
int n = rnd.nextInt();
System.out.println(n);
El número aleatorio obtenido lo hemos guardado en la variable n.
Si ejecutamos el programa mostrará el número entero que ha obtenido, que podría ser por ejemplo:
-1430279300
Ejemplo para generar un número aleatorio entre 0 y 10
Random rnd = new Random();
int n = rnd.nextInt(11);
System.out.println(n);
Si ejecutamos el programa mostrará el número entero que ha obtenido, que podría ser por ejemplo:
9
rnd.nextInt(11) obtiene numeros enteros aleatorios entre 0 y 10 ambos incluidos.
En general rnd.nextInt(N) obtiene un numero entero aleatorio >= 0 y < N
Ejemplo para generar 5 enteros al azar:
Random rnd = new Random();
for(int i = 1; i <= 5; i++){
System.out.println(rnd.nextInt());
}
En este bucle for se generan 5 números enteros de forma aleatoria y se muestran por pantalla. Los números podrían ser estos:
-394395199
1133763686
-424454120
1147379979
-2049113297
Ejemplo para
obtener 5 enteros al azar entre 0 y 6:
for(int i = 1; i <= 5; i++){
System.out.println(rnd.nextInt(7));
}
rnd.nextInt(7) obtiene numeros enteros entre 0 y 6 ambos incluidos
Para
generar 5 enteros entre 1 y 6:
for(int i = 1; i <= 5; i++){
System.out.println(rnd.nextInt(6) + 1);
}
rnd.nextInt(6) obtiene numeros enteros entre 0 y 5 ambos incluidos
Como queremos que los números aleatorios sean entre 1 y 6 lo que hacemos es sumarle 1 al número
aleatorio obtenido.
En general, para generar enteros entre dos valores DESDE , HASTA, ambos incluidos usaremos esta fórmula:
rnd.nextInt(HASTA – DESDE + 1) + DESDE
Por ejemplo, para generar 5 números entre 10 y 20:
for(int i = 1; i <= 5; i++){
System.out.println(rnd.nextInt(20 – 10 + 1) + 10);
}
A partir de Java 17 podemos obtener números aleatorios entre dos valores de esta forma:
rnd.nextInt(DESDE, HASTA);
esta instrucción obtiene un número entero aleatorio >= DESDE y < HASTA
Ejemplo: Obtener un número entero aleatorio entre 15 y 78 ambos incluidos:
rnd.nextInt(15, 79);
Ejemplo: Obtener un número entero aleatorio entre -240 y 1000 ambos incluidos:
rnd.nextInt(-240, 1001);
Me ha servido de bastante ayuda. Gracias
ResponderEliminarcon esta explicacion quien necesita maestro....exelente
ResponderEliminarMuchas Gracias!!!
Eliminarmuy buen tutoral
EliminarLo máximo, gracias por la explicación, un abrazo
ResponderEliminarlos numeros generados que da el programa, son tomados por este para generar sobre ellos una nueva serie de numeros.
ResponderEliminarEXCELENTE EXPLICACIÓN AMIGO . . FELICIDADES POR TU TRABAJO
ResponderEliminarpara agregar algo, creo que algo mas simple es sumarle el numero del cual queremos empezar e inicializar en el que queremos terminar, me explico:
ResponderEliminarsi queremos numeros entre 100 y 200
Random rnd = new Random();
for(int i = 1; i<=5; i++)
System.out.println(rnd.nextInt(100)+100); */lo que estoy haciendo es decir que busque los numeros dentro delos primeros cien numero, como yo quiero enre cien y dosientos le sumo 100 a cada eleccion y quedara entre este rango*/
En el caso que quisiera entre -50 y 50 seria lo mismo
inicializando con 101 y restandole el limite que seria 50( 101 por que si contamos desde -50 al 50 tenemos 101 numeros
esto por ql numero cero igual esta incluido.)
Esto quedaria asi:
Random rnd = new Random();
for(int i = 1; i<=5; i++)
System.out.println(rnd.nextInt(101)-50);
En el caso que eligiera el numero maximo que es 100 se le restaria 50 y quedaria en 50,
ahora si elige el numero minimo que es 0 se le restaria 50 y quedaria en -50.
ojala se entienda la idea, bye......
muchas gracias me sirvio tu aportación amigo
Eliminarya sabes soy una estudiante de sistemas y no siempre todos somos buenos programando.
Fíjate que en realidad lo que estás haciendo es aplicar la fórmula que se explica en el post.
Eliminarrnd.nextInt(hasta-desde+1) + desde
Entre -50 y 50:
rnd.nextInt(50 - -50 +1) - 50 => rnd.nextInt(101)-50
Muy Bueno. Gracias :)
ResponderEliminarsi muy bueno
ResponderEliminartodo eso esta mal porque siempre que se genere en el Math.random un 0.0 el resultado va ser 0 lo que quiere decir que esta maaaaaaaaaaaaaaal. todas las formulas
ResponderEliminarHola Carlos, si Math.random obtiene un 0.0 el resultado es el límite inferior. Por ejemplo, un número entre 8 y 15:
Eliminar(int)(Math.random()*(15-8+1)+8);
Si Math.random genera un 0 el resultado es:
(0*(15-8+1)+8) => 0 + 8 = 8
humm que pena, si es que estaba mirando mal las formulas..muchas gracias
EliminarDisculpen y si quiero que haga desde el 0 al infinito??
ResponderEliminary si quiero q me genere palabras aleatorias combinandolas con case
ResponderEliminarmuchas gracias, me ha ayudado!!
ResponderEliminarGracias che, me llevo la 1era manera de hacerlo ;)
ResponderEliminarde nada compa
Eliminarhola...nesecito un script que me genere un nro de 4 digitos secuenciales..por ej. 1234, 1235, 1236, 1237..etc.
ResponderEliminargcias.
elmesiasahora@yahoo.com.ar
como cambias el limite inferior del random??
ResponderEliminarGracias, muy bien explicado!
ResponderEliminarmuy bueno
ResponderEliminarEsta bien.... Me pueden ayudar para generar un numero después de 15 segundos
ResponderEliminarEscribir un programa que llene una pila de 50 elementos de tipo entero usando el metodo random de la clase "Math". Pida un dato al usuario, lo busque en la pila y si lo encuentra indique cuantos elementos se retiraron antes de encontrarlo y cuales fueron.
ResponderEliminarAlguien lo podría hacer?
Por si resulta de su interés o el de alguno de sus lectores, le dejo el enlace a un generador de números aleatorios:
ResponderEliminarhttp://informatica-pfont.blogspot.com/2011/07/numeros-aleatorios.html
valeee (y)
ResponderEliminarY si necesito un numero aleatorio pero cada 3 segundos.
ResponderEliminarY si necesito un numero aleatorio pero cada 3 segundos.
ResponderEliminarY si quiero que me haga el desayuno, la paja de vez en cuando y me de dinero también. Babosos hacen unas preguntas más tontas. Fino por el profe!....
ResponderEliminarPodrías hacer un código que puedas generar números aleatorios entre 2 rangos distintos?
ResponderEliminarPara colocar entre rangos se hace de esta manera Math.random()*10 , eso quiere decir que estas generando aleatorios entre 0 y 10 pero que pasa si quieres un aleatorio entre 20 y 10 solo agregas el más Math.random()*20+10
EliminarMuchas gracias, me quedo sin dudas
ResponderEliminarExelente y simple su explicación. Gracias.
ResponderEliminarPor ejemplo cad=cad+String.valueOf((int)(Math.random()*(2-(-2)+1)-2))+"\n"; quiero un rango de -2 a 2 pero al hacer eso en un while de 100, solo me saca de -1 a 2.
ResponderEliminary para imprimirlo en un Text Field?. Solo sirve si lo imprimo en consola :(
ResponderEliminarPuedes hacer esto
ResponderEliminarInt numAutogenerado =0;
numAutogenerado=rnd.nextInt(6)+1;
Textfield.settext(numAutogenerado+"")
¿Y si necesito que sume los números que me dio?
ResponderEliminarAQUI LES DEJO EL CÓDIGO QUE HIZE PARA QUE ME RECONOZCA LOS NEGATIVOS :)
ResponderEliminar/*1.-Programa Java que guarda en un array 10 números enteros aleartorios. A continuación se recorre el array y calcula cuántos números son positivos, cuántos negativos y cuántos ceros*/
import java.util.Scanner;
import java.util.Random;
class ejercicio1 {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
Random rnd = new Random();
int array[] = new int[10];
int positivos = 0, negativos = 0, ceros = 0;
int i;
//generamos 10 números aleartorios
for(i = 0; i < array.length; i++) {
array[i] = (rnd.nextInt(10-(-10)+0)+(-10));
}
//recoremos el array para encontrar números positivos, negativos y ceros
for(i = 0; i < array.length; i++) {
if(array[i] > 0) {
positivos++;
} else {
if(array[i] < 0) {
negativos++;
} else {
if(array[i] == 0){
ceros++;
}
}
}
}
//Impresion del array
for(i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
//Impresion de los contadores
System.out.print("\nCantidad de positivos: "+positivos);
System.out.print("\nCantidad de negativos: "+negativos);
System.out.print("\nCantidad de ceros: "+ceros);
System.out.println();
}
}
Generar una lista de N numeros aleatorios sin repetición, comprendidos en un rango dado por el usuario.
ResponderEliminarMe ayudan por favor
Hola, este sistema me podría valer para generar números de lotería, para venderlos on line para una rifa???
ResponderEliminarMuy buen trabajo, gracias!!
ResponderEliminarMuchas gracias me sirvió mucho!
ResponderEliminarNo me sirve el profesor me dijo que generar 1000 y este genera muy poquitos, no sirve
ResponderEliminarcodigo pedorro
ResponderEliminar