entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Generación de números aleatorios

Buenas noches compañeros, tengo una duda, os pongo el código y explico:

// Recojo el valor de lo cuadros de texto y lo multiplico por 60 para pasarlo a minutos
rangomin = Integer.parseInt(TiempoMin.getText())*60;
rangomax = Integer.parseInt(TiempoMax.getText())*60;
// Genero un valor entre los dados por los textfield por el usuario
random = (int)Math.floor(Math.random()*(rangomin+rangomax));

Es un código muy simple pero me esta dando algún dolor que otro de cabeza, explico el porqué: Con este código recojo unos datos de las cajas de texto, los paso a Int a través del parse y luego los meto en una variable instanciada como int en ámbito global (hasta aqui todo correcto). El problema viene cuando el usuario pone en la caja de texto TiempoMin: 1 y en la caja de texto TiempoMax: 2 -> Me recoge un valor entre 1 a 3 minutos y realmente no entiendo porqué, debería solo mostrar un valor entre el minuto 1 y 2.

¿Como puedo conseguir esto?

Un saludo y gracias :D

1 Respuesta

2votos

Leonardo-Tadei Puntos227320

Hola Yesod,

tenés un error semántico: tu código funciona bien por no hace lo que querés. El motivo es la multimplicación entre la suma de rangomin y rangomax. Entonces para tu ejemplo estás multimplicando por 3 y cuando el random devuelve 0.96 por ejemplo, el redondeo llegará a darte 3 que será el entero más cercano al resultado.

Podrías hacer halgo así para solucionarlo:

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

Saludos!

0voto

Yesod comentado

Muchas gracias, funciona perfectamente :D

¿Me podrías explicar porque pones +1 al final de int range = (max - min) +1;? No entiendo muy bien esto :D

Gracias compañero :D

0voto

Leonardo-Tadei comentado

El +1 está porque el valor del máximo no aparecería ya que floor() te devuelve el entero inmediato inferior al número dado.... si no recuerdo mal, esto es porque random() no devuelve entre 0 y 1, sino entre 0 y 0.9 periódico y por tanto nunva valdrá 1, que sería la única forma de obtener el valor en max.

Saludos!

0voto

Yesod comentado

Ah vale! Muchas gracias de nuevo amigo :D

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta