Esta es una pregunta bastante simple de Java (aunque probablemente aplicable a toda la programación):
Math.random()
devuelve un número entre cero y uno.
Si quiero devolver un número entero entre cero y cien, haría:
(int) Math.floor(Math.random() * 101)
Entre uno y cien, haría:
(int) Math.ceil(Math.random() * 100)
Pero, ¿y si quisiera obtener un número entre tres y cinco? Será como la siguiente declaración:
(int) Math.random() * 5 + 3
Sé sobre nextInt()
en java.lang.util.Random
. Pero quiero aprender cómo hacer esto Math.random()
.
(int)Math.floor(Math.random()*3) + 3
Math.ceil
es incorrecto, da el resultado incorrecto cuandoMath.random()
regresa0
.Respuestas:
Salida de
randomWithRange(2, 5)
10 veces:Los límites son inclusivos, es decir, [2,5], y
min
deben ser menores quemax
en el ejemplo anterior.EDITAR: si alguien intentara ser estúpido y revertir
min
ymax
, podría cambiar el código a:EDIT2: Para su pregunta sobre
double
s, es solo:Y de nuevo, si quieres probarlo como un idiota, es solo:
fuente
(int)
y desea que devuelva undouble
?int
s condouble
s (y la conversión de tipos es innecesaria). Asumí que queríasint
s pero agregaré a mi publicación.double
s eliminar el+ 1
también yaMath.random()
que no se está truncando. Sin embargo, el rango será [min, max) ya queMath.random
"Devuelve un valor doble con un signo positivo, mayor o igual que 0.0 y menor que 1.0". Existiría una posibilidad mínima de que el número sea exactamentemax
igual, incluso si fuera posible.Si desea generar un número del 0 al 100, su código se vería así:
Para generar un número del 10 al 20:
En el caso general:
(donde
lowerbound
es inclusivo yupperbound
exclusivo).La inclusión o exclusión de
upperbound
depende de su elección. Digamosrange = (upperbound - lowerbound) + 1
entoncesupperbound
es inclusiva, pero sirange = (upperbound - lowerbound)
a continuaciónupperbound
es exclusivo.Ejemplo: si quiero un número entero entre 3-5, entonces si el rango es (5-3) +1, entonces 5 es inclusivo, pero si el rango es solo (5-3), entonces 5 es exclusivo.
fuente
upperbound
¿exclusivo? Creo que será inclusivo.La
Random
clase de Java ubicada en eljava.util
paquete servirá mejor a su propósito. Tiene algunosnextInt()
métodos que devuelven un número entero. El que toma un argumento int generará un número entre 0 y ese int, el último no incluyente.fuente
Math.random()
. Gracias.Para generar un número entre 10 y 20 inclusive, puede usar
java.util.Random
fuente
Aquí hay un método que recibe límites y devuelve un entero aleatorio. Es un poco más avanzado (completamente universal): los límites pueden ser tanto positivos como negativos , y los límites mínimos / máximos pueden venir en cualquier orden.
En general, encuentra la distancia absoluta entre los bordes, obtiene un valor aleatorio relevante y luego cambia la respuesta según el borde inferior.
fuente