Como generar números aleatorios con el método Math.random de Java

Hola a todos, hoy os explicare como podemos generar números con el método Math.random de la clase Math de Java. Por defecto sería, Math.random(), con este método podemos generar números aleatorios, en principio seria entre 0 y 1, pero esto lo podemos cambiar para que genere un número entre un rango que nosotros deseemos. Para generar un número entre 0 y el número que deseemos, debemos escribir *num_deseado, por ejemplo, Math.random()*30, esto genera números entre 0 y 30, este ultimo no se incluye, el máximo sería 29,9999…

Para generar un número entre un número que deseemos a otro , debemos escribir *(num_minimo-num_maximo)+num_maximo, por ejemplo, Math.random()*(5-20)+20. 

Un buen truco, para recordar esto es multiplicar por 0 para saber el mínimo y por 1 para el máximo. Por ejemplo, en el ejemplo anterior, el mínimo seria 5, ya que 0*(5-20)+20 daría como resultado 5, y el máximo seria 20, ya que 1*(20-5)+5 daría como resultado 20. Por último, haremos que el número generado sea un número entero en lugar de uno de coma flotante, para ello escribimos (int)Math.floor(Math.random()*(num_maximo-num_minimo)+num_minimo). Recordar que en lugar de números podemos usar variables. Veamos unos ejemplos:

public class PruebaApp {

	public static void main(String[] args) {

		int num1=50;
		int num2=120;

		System.out.println("Números generados entre 0 y 20, con decimales (sin incluir el 0 y el 20)");
		for (int i=0;i<1000;i++){
			double numAleatorio=Math.random()*20;
			System.out.println(numAleatorio);
		}

		System.out.println("Números generados entre 5 y 20, con decimales (sin incluir el 5 y el 20)");
		for (int i=0;i<1000;i++){
			double numAleatorio=Math.random()*(20-5)+5;
			System.out.println(numAleatorio);
		}

		System.out.println("Números generados entre 50 y 120, sin decimales (sin incluir el 50 y el 120)");
		for (int i=0;i<1000;i++){
			int numAleatorio=(int)Math.floor(Math.random()*(num1-num2)+num2);
			System.out.println(numAleatorio);
		}

                System.out.println("Números generados entre 50 y 120, sin decimales (incluyendo el 50 y el 120)");
		for (int i=0;i<1000;i++){
			int numAleatorio=(int)Math.floor(Math.random()*(num1-(num2+1))+(num2));
			System.out.println(numAleatorio);
		}
	}

}

Os dejo un método que automatiza este proceso.

 public static int generaNumeroAleatorio(int minimo,int maximo){
        
        int num=(int)Math.floor(Math.random()*(maximo-minimo+1)+(minimo));
        return num;
    }

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Compartir

10 comentarios

  1. reisilver

    Gracias me sirvió de mucho la información ,

  2. Joseba

    Hola,

    Me estoy fijando en la última línea de código que tienes en el ejemplo.
    Si no me equivoco, tu intención es la de generar un número entero entre dos valores (incluyendo ambos) que son 50 y 120.
    Si esa es tu intención, tendrías un error en el código. Lo correcto sería:

    int numAleatorio=(int)Math.floor(Math.random()*(num2-num1+1)+num1);

    Es decir, tiene que ser num2 – num1 + 1; Si no, no te incluiría el 120 nunca.

    Si lo copias en un Entorno de Desarrollo y lo lanzas, lo comprobarás.
    Un Abrazo, y enhorabuena por la página.

  3. Disco Duro de Roer Post author

    Gracias, hacia tiempo que no lo actualizaba y se me olvide completamente.

    He añadido un metodo que lo automatiza.

    Un saludo.

  4. Erlyn

    Muchas gracias por tu código. Soy nuevo en la programación y tardé mucho en hacer un ejercicio como este. Hay mucho código erróneo en la mayoría de posts.

  5. Fernando

    Si sirven los codigos, pero no lo entiendo :(

  6. admin Post author

    ¿Qué es lo que no entiendes exactamente?

    Un saludo

  7. DIEGO

    Hola amigo sera que me puedas decir que clases son las que mas se utilizan a nivel basico porfas :) EN JAVA :)

  8. TOBIAS

    Compañero, si en vez de numAleatorio=Math.random()*(20-5)+5; usases numAleatorio = (int) (Math.random()*20+5); te sale directamente numeros del 5 al 20, y sin decimales en vez de complicarse la vida con math.floor.

    Saludos.

  9. Arigató

    Gracias, me ha venido muy bien para los ejercicios que clase. El profesor se explica como una momia del Museo Británico. Más sencillo así.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *