util metodo enteros java math

enteros - metodo random math java



Math.random() explicado (3)

Esta es una pregunta bastante simple de Java (aunque probablemente aplicable a toda la programación):

Math.random() devuelve un número de cero a uno.

Si quiero devolver un número entero de cero a cien, lo haría:

(int) Math.floor(Math.random() * 101)

Del uno al cien, yo haría:

(int) Math.ceil(Math.random() * 100)

Pero, ¿y si quisiera hacerlo de tres a cinco? Será como la siguiente declaración:

(int) Math.random() * 5 + 3

Sé sobre nextInt() en java.lang.util.Random . Pero quiero aprender a hacer esto con Math.random() .


La clase Random de Java ubicada en el paquete java.util cumplirá mejor su propósito. Tiene algunos métodos nextInt() que devuelven un entero. El que toma un argumento int generará un número entre 0 y ese int, este último no incluido.


Si desea generar un número de 0 a 100, entonces su código se vería así:

(int)(Math.random() * 101);

Para generar un número del 10 al 20:

(int)(Math.random() * 11 + 10);

En el caso general:

(int)(Math.random() * ((upperbound - lowerbound) + 1) + lowerbound);

(donde lowerbound es inclusivo y upperbound exclusivo).

La inclusión o exclusión de Uppderbound depende de su elección. Digamos Rango = (Uppderbound-lowerbound) +1 luego el Uppderbound es Inclusivo. pero si el rango = (Uppderbound-lowerbound), el Uppderbound es exclusivo. Ejemplo: si quiero un entero b / w 3-5, entonces si el rango es (5-3) +1, entonces 5 es inclusivo, si el rango es justo (5-3), entonces 5 es Exclusivo.


int randomWithRange(int min, int max) { int range = (max - min) + 1; return (int)(Math.random() * range) + min; }

Salida de randomWithRange(2, 5) 10 veces:

5 2 3 3 2 4 4 4 5 4

Los límites son inclusivos, es decir [2,5], y min debe ser menor que max en el ejemplo anterior.

EDITAR: Si alguien intentara ser estúpido e invertir el min y el max , podría cambiar el código a:

int randomWithRange(int min, int max) { int range = Math.abs(max - min) + 1; return (int)(Math.random() * range) + (min <= max ? min : max); }

EDIT2: para su pregunta sobre double s, es solo:

double randomWithRange(double min, double max) { double range = (max - min); return (Math.random() * range) + min; }

Y de nuevo, si quieres una prueba de idiotez, es solo:

double randomWithRange(double min, double max) { double range = Math.abs(max - min); return (Math.random() * range) + (min <= max ? min : max); }