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()
.
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);
}