Número aleatorio en Java

07/Abr/2007 Java , 56 Comentarios

Múltiples circunstancias harán que necesitemos generar un número aleatorio. La más habitual será la de generación de claves. Si nos encontramos dentro de un entorno Java podemos apoyarnos en la clase Math para dicha generación.

Y es que los pasos serán muy sencillos. La clase Math tiene un método .random(), el cual genera un número aleatorio entre 0.0 y 1.0. El valor devuelto será de tipo double.

  1. Math.random();

Si queremos hacer que el número sea un número natural entre un determinado rango, deberemos de seguir la siguiente formula:

  1. Math.random()*limite+1;

Donde límite será el número más alto del rango. Los número genérico que generaremos irán entre el 1 y el límite. Así, por ejemplo, si queremos generar número entre el 1 y el 25 tendremos que utilizar la siguiente línea de código:

  1. Math.random()*25+1;

Hay que recordar que el número generado es del tipo double. Es por ello que para finalizar deberemos de hacer un casting a un entero.

  1. int numeroAleatorio = (int) (Math.random()*25+1);

Vídeos sobre Java Básico


56 comentarios en “Número aleatorio en Java”

Víctor Cuervo

Matriz aleatoria en Java - Línea de Código

[…] Para poder generar el número aleatorio, en este caso entre el 1 y el 10, utilizamos el método .random() de la clase Math. Este método nos devuelve un número entre el 0.0 y el 1.0, que multiplicándolo por 9 y sumándolo 1 nos da un número aleatorio entre 1 y 10. Si quieres saber más sobre la generación del número aleatorio puedes consultar Generar Números Aleatorios en Java. […]

Víctor Cuervo

Cabillo

Tambien se puede hacer de la siguiente forma para requerir un numero aleatorio que me de como entero. Seria de esta forma:

int numeroAleatorio = (int)Math.round(Math.random()*99);

El numero aleatorio se guardara en la variable “numeroAleatorio” como un numero entero. El numero 99, signica el tope que recalculara aleatoriamente un numero, o sea, calculara del 1 al 99.

Víctor Cuervo

Dorothy

Verzendkosten en levertijd kunnen variren op basis van de bestemming.
Als je genoeg budget voor grote cadeaus hebben,
waarom dan niet vrijgevig te zijn en te helpen de
nieuwe ouders geld te besparen door het vermijden
ze naar kwekerij items te kopen . Tinnen baby-cadeau-artikelen zijn
vaak het meest populair te graveren .

Víctor Cuervo

Víctor Cuervo

@claudio, @jairo,

Muchísimas gracias por vuestros comentarios. Son de gran apoyo para seguir escribiendo.

Saludos.

Víctor Cuervo

jairo

buenisima página.

Víctor Cuervo

claudio

Gracias, super práctico

Víctor Cuervo

Nicolas Enao

Os agradezco mucho, esto me ha servido muchísimo en mi estudio, pues soy novato, hace poco comencé la universidad y me ha costado mucho entender java, estoy trabajando con el IDE Eclipse, y ahora estoy con un problemilla, y yo de veras que no lo he conseguido, es una tarea que dice así:

“Elabore un programa que lea el nombre y el apellido de un empleado, el valor del día de salario y el número de días trabajados. Se debe generar en una sola ventana de impresión la siguiente información: nombre, apellidos, valor día, número de días trabajados y total apagar.”

… aun no he conseguido hacer ese programa, cuando voy a compilar el programa y ver si funciona, fijate que me sale un error tras de otro, y no son los puntos o las comas o los punto y comas, eso si lo entiendo y esta todo bien respecto a eso, pero los errores estan en la estructura del mismo (int, char, string, etc..), y no se que hacer, ¿podriais ayudarme? porfavor!!!

os agradezco mucho de nuevo, yo se que esta es la primera vez que ingreso a esta pagina, pero me ha ayudado mucho y veo que sabeis de Java, por tanto, os pido vuestra ayuda porque enserio la necesito, mil y mil gracias, yo etoy y estare pasando por esta pagina todos los dias dsde ahora hasta acabar este ciclo, y seguro que mas alla porque quiero aprende de lo que aqui publicáis, gracias!!!!

Víctor Cuervo

Víctor Cuervo

@Luis,

Me parece muy bueno el programa. Vamos a publicarlo. O te animas a publicarlo tu? Solo tienes que describir las líneas, como hacemos nosotros arriba.

Víctor Cuervo

Víctor Cuervo

@FollowBackPower,

Nos lo podrías escribir en C++ y lo publicamos en la web. ¿Qué te parece?

Víctor Cuervo

Luis

Gracias man, me hiciste un super favor, jajajaja muy sencillo pero cuando no lo sabes usar es una bendiciòn jajaja oye por cierto me di cuenta que no es necesario ponerle el 25+1, puedes poner cualquier numero entero por ejemplo 500, es una aportacion mas, como todo tiene una razon de ser te dejo el programa que hice quizas les sirva de algo

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Cont extends Applet implements ActionListener
{private Button eval;public void init()
{
eval = new Button(” Siguente “);
eval.setBackground(Color.green);
add(eval);
eval.addActionListener(this);
}
public void actionPerformed(ActionEvent event) {
int numeroAleatorio = (int) (Math.random()*1000000);
repaint();
}public void paint(Graphics g) {
int numeroAleatorio=(int)(Math.random()*1000000);
g.drawString(“El número aleatorio es ” + numeroAleatorio, 100, 100);
}
}

Víctor Cuervo

FollowBackPower

No hay mejor manera de hacerlo siempre he odiado java por sus tantas complicaciones y prefiero c++ pero bueno hay que actualizarse, gracias por la ayuda agregaré a favoritos.

Víctor Cuervo

sergio

The_Pro dota utiliza la formula! (int)((b – a + 1) * math.random() + a) solo reemplaza!
(int)(21*Math.random()-10);

Víctor Cuervo

The_Pro dota

yo necesito que aleatoriamente se elija entre -10 y 10 como le hago?

Víctor Cuervo

sergio

El codigo esta mal ya que math.random() genera un numero mayor o igual que 0.0 y menor que 1.0 asi que seria asi: (int)((b – a + 1) * math.random() + a) siendo a el limite inferior y b el limite superior. Espero que les sea de ayuda!

Víctor Cuervo

Víctor Cuervo

@Javier Villarreal, me alegra mucho tu comentario y que te sirviese el código. Intentaremos seguir así.

Víctor Cuervo

Javier Villarreal

Muchas Gracias amigo me sirvio mucho para mi tarea sigue asi!

Víctor Cuervo

Juani

SI BIEN ME SIRVIÓ PARA APRENDER, LOGRE DETECTAR QUE HAY UN ERROR EN LA EXPLICACIÓN YA QUE EL RANGO QUE RETORNA ESTE MÉTODO ES ENTRE 0(CERO) Y EL VALOR MÁXIMO, NO ENTRE 1 Y EL VALOR MAX.
MUCHAS GRACIAS

Víctor Cuervo

Jorge

Muchas gracias si me sirvió, explicas muy bien compa!

Víctor Cuervo

Víctor Cuervo

@Mauricio,

Es una cuestión de paréntesis.

Caso 1. Incorrecto – (int)Math.random()*100;
Se ejecuta el Math.random() que da un valor entre 0.0 y 1.0. Lo más probable es que sea 0.x. Después se convierte el cast a int. Con lo cual se quedará un 0. La multiplicación final siempre dará 0.

Caso 2. Correcto (int)(Math.random()*100);
Primero se ejecuta el Math.random() y su valor entre 0.0 y 1.0. Después se multiplica por el 100, teniendo ya un número bueno. Y finalmente se hace el cast a entero. Consiguiendo nuestro número aleatorio.

Espero que te ayude la explicación.

Víctor Cuervo

Mauricio

Hola, estoy trabajando con BlueJ y cuando corro este método:

public int numeroAleatorio(){
int res = (int)Math.random()*100;
return res;
}
}
Siempre me genera 0 hay algún error ahi? tambien le puse 100+1 y siempre me devuelve 1, no se la verdad cual es la causa del error a lo mejor el IDE esta defectuoso o el metodo esta mal?

Víctor Cuervo

Arturo

System.out.println(“Randon del 20 al 25”);
int NumeroRandom;
boolean aux=true;
int[] arrayNumeroRandoms = new int[6];
aux = true;
int x=0;
while (x19){
for (int y=0;y<arrayNumeroRandoms.length;y++) {
if(arrayNumeroRandoms[y]== NumeroRandom){
aux = true;
break;
}else{aux = false;}
}
if(aux == false){
arrayNumeroRandoms[x]= NumeroRandom;
x++;
}
}
}
for (int y=0;y<arrayNumeroRandoms.length;y++) {
System.out.println (arrayNumeroRandoms[y]);
}
}

Víctor Cuervo

Arturo

System.out.println(“Randon del 20 al 25”);
int NumeroRandom;
boolean aux=true;
int[] arrayNumeroRandoms = new int[6];
aux = true;
int x=0;
while (x19){ //(NumeroRandom en mayor a 19 )
for (int y=0;y<arrayNumeroRandoms.length;y++) {
if(arrayNumeroRandoms[y]== NumeroRandom){
aux = true;
break;
}else{aux = false;}
}
if(aux == false){
arrayNumeroRandoms[x]= NumeroRandom;
x++;
}
}
}
for (int y=0;y<arrayNumeroRandoms.length;y++) {
System.out.println (arrayNumeroRandoms[y]);
}
}

Víctor Cuervo

Arturo

donde vean el while while (x19){ (pongan X es menor a 6)

Víctor Cuervo

Arturo

se copio mal ahi va nuevamente
int NumeroRandom;
boolean aux=true;
int[] arrayNumeroRandoms = new int[6];
aux = true;
int x=0;
while (x19){

for (int y=0;y<arrayNumeroRandoms.length;y++) {
if(arrayNumeroRandoms[y]== NumeroRandom){
aux = true;
break;
}else{aux = false;}
}
if(aux == false){
arrayNumeroRandoms[x]= NumeroRandom;
x++;
}
}
}

for (int y=0;y<arrayNumeroRandoms.length;y++) {
System.out.println (arrayNumeroRandoms[y]);
}

Víctor Cuervo

Arturo

Hola recien entro a este mundo y ya posteo algo,
aca esta el codigo de valor entre 20 y 25, funciona… pero con un poco mas de codigo XD

int NumeroRandom;
boolean aux=true;
int[] arrayNumeroRandoms = new int[6];
aux = true;
int x=0;
while (x19){

for (int y=0;y<arrayNumeroRandoms.length;y++) {
if(arrayNumeroRandoms[y]== NumeroRandom){
aux = true;
break;
}else{aux = false;}
}
if(aux == false){
arrayNumeroRandoms[x]= NumeroRandom;
x++;
}
}
}

for (int y=0;y<arrayNumeroRandoms.length;y++) {
System.out.println (arrayNumeroRandoms[y]);
}

Víctor Cuervo

Daro

Hola gente, si alguien puede ayudarme, estoy necesitando algo un poco mas complejo, un numero aleatorio con una tendencia. Ej un numero entre 0 y 100 con una tendencia en 70. Habrá alguna funcion de java que me ayude o hay que crear el algoritmo de cero. Desde ya muchas gracias!!!

Víctor Cuervo

anitoco

Pero… ¿Alguien lo ha probado?

¡QUE NO FUNCIONA ¡¡COÑO!! !

La forma correcta es:

int o = (int)(Math.random()*(25-10+1)+10);

Víctor Cuervo

yo

hola muchisimas gracias por la explicacion me salvo la vidA!! pero aun ay algo que sigo sin entender… que pasaria que por ejemplo el Math.random() genere el numero 1.000000 (se que son extremadamente bajas las posibilidades) pero luego al multiplicarlo por 25 sería 25 por supuesto y cuando venga el +1 no saldria 26??

Porque se pone un 1 al final??’

gracias de antemano por la aclaracion

Víctor Cuervo

lineadecodigo

@micke,

Me alegro que te haya servido. 🙂

Víctor Cuervo

micke

Gracias me sirvio de maravilla para mi tarea buen ejemplo

Víctor Cuervo

lineadecodigo

@Emanuel,

Muchas gracias por tu comentario. Esperamos poder seguir ayudando.

Víctor Cuervo

Emanuel

Hoy estuve haciendo varios trabajos prácticos y a esta web no la cerré en ningún momento! Es de muchísima ayuda!

Gracias!!

Víctor Cuervo

lineadecodigo

@Radick,

Ya hemos puesto el código para que se pueda visualizar entero y descargar directamente desde http://code.google.com/p/lineadecodigo/source/browse/trunk/lineadecodigo_java/src/com/lineadecodigo/java/basico/NumeroAleatorio.java

¿Qué más cosas mejorarías?

Víctor Cuervo

Radick

HORRIBLE esta mierda apesta ni siquiera ponen la clase completa. pendejos.

Víctor Cuervo

Ivan Lira

La verdad una alternativa muy ingeniosa y practica, me funciono muy bien, aunque para mi caso tenía un rango de intervalos demasiado sesgados y la creo que el resultado no parecia tan aleatorio jeje.
Me funciono muy bien, gracias.

Víctor Cuervo

Guillermo

Les Agradeceia si me pudiera informa como hacer el mismo ejerciio pero con palabras traidas (scanner) de un arcivo.

es decir eleir una palabra a la azar pero de un archivo txt

Víctor Cuervo

ivan

ok, ronan gracias por la correccion, saludos

Víctor Cuervo

Ronan Froylan

oe ivan dice de 5 a 25 tu codigo genera numeros de 0 a 30, entoces el codigo seria asi:

Math.random()*20+5;

salu2!!!!

Víctor Cuervo

ivan

cyndi lo que debes hacer es en vez de sumar+1,sumas el numero menor del rango y en lugar de el 25 multiplicas por el mumero mayor del rango….quedaria algo como esto…

Math.random()*(mayor)+(menor);
Math.random()*25+5;

okkkkk

Víctor Cuervo

aleart

teeeeenkiuuus!

haha

gracias ese!

Víctor Cuervo

diego

hola necesito ayuda con un programa que estoy haciendo

bueno estoy usando netbasn 6.7 y necesito con un boton generar 500 numeros aleatorios en unrango de -250 a 250 y almacenarlos en una cola.

espero me puedan ayudar

mi correo es geminis_26990@hotmail.com

Víctor Cuervo

Richardo

Se te agradece mucho.. lo utilice para mi tarea de programacion

Víctor Cuervo

gerardo

hola necesito crear un programa en java que realice una de las pruebas de estadistica y aleatoriedad la llamada “Pruebas de Forma” alguien me puede ayudar le los agradeceria mucho si alguien puede favor de mandarlo a mi correo. saludos!!!

Víctor Cuervo

MCI

Ayuda por favor, como puedo generar numeros aleatorios que no se repitan, por ejemplo del 1 al 50, y que no se repitan los numeros,agradeceria su ayuda.

Víctor Cuervo

jr

¿es realmente aleatorio? ¿¿no es mejor usar la clase Random y asignarle una semilla como System.CurrentTimeMillis()??

Víctor Cuervo

Gianfranco

Gracias.!

Víctor Cuervo

lineadecodigo

@IBI D C., lo apunto para la próxima vez. Intentaré explicarlo más sencillo, ya que lo que persigo es que sea muy fácilmente entendible. Gracias por los ánimos.

@Citlaly, has probado a bajarte el código y compilarlo. ¿Qué error te da?

Víctor Cuervo

Citlaly

no funciona

Víctor Cuervo

IBI D C.

thanks pero prodrias porfavor escribirlo mas detalladamente ya que apenas somos principiantes y pues no sabemos tanto de esto, bueno espero que entiendas y que sigas con este tipo de cosas bueno bye see you visit leter

Víctor Cuervo

francisco chan

deseo informacion sobre como programar en java me daria gusto que me envien un manual a micorreo y si pueden envien un programa de java

Víctor Cuervo

Marialbi

Hola, muy util este material, será posible que me digas como puedo hacer para generar un número aleatorio cada cierto tiempo, necesito generar un número cada tres minutos…..gracias….

Víctor Cuervo

cindy

oye sera que me puedes decir como seria el codigo cuando el rango empieza en un numero distinto de uno…ejemplo de 5-25

Víctor Cuervo

hugo

de lujo man me sirvio bastante gracias y espero escontrar mas respuestas por aqui

Víctor Cuervo

lineadecodigo

@alan,

Muchas gracias por tus ánimos. Intentaré seguir publicando cosas útiles.

Víctor Cuervo

Alan

Muchas Gracias es justo lo que buscaba.

Por Favor continua Publicando este tipo de Material

Víctor Cuervo

Martin

Gracias man es el q estaba buscando XD me ayudo mucho para mi prueba

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*

*