Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: patricio1 en 03 de Julio 2021, 04:44
-
Hola estimados, ojalá me puedan ayudar con lo siguiente:
tengo que crear un método indiceMasaCorporal el cual retorna el IMC de un paciente para un mes X.
Pero para cada paciente se le registra rut, nombre, edad, sexo y peso mensual (array con los pesos mensuales de año) y el array que almacena el peso mensual se genera de forma aleatoria con números enteros rango entre 70 y 250
Yo creé el array del peso mensual el cual me retorna los meses del 1 al 12 y números aleatorios entre el rango.
private int[] pesoMensual;
public Paciente(){
this.pesoMensual = new int[12];
for(int i=0; i < pesoMensual.length; i++){
this.pesoMensual[i] = (int) (Match.ramdom() * (250-70+1)+70) }
}
¿Cómo lo podría realizar para que al momento de que se ingrese algún mes y la altura por pantalla se realice el cálculo del IMC tomando en cuenta lo anterior?
Ojalá me puedan ayudar con esto. Saludos.
-
obviamente que tu solución está mal planificada. Para poder resolver el ejercicio necesitas almacenar en el arreglo de peso mensual el mes y el peso, incluso el mes tiene que ser año y mes. No sé qué versión de JDK uses, pero si es la 16 yo usaría un record:
record Peso(int year, int month, int weight){}
Y luego mi paciente tendría el campo:
private Peso[] pesoMensual;
Después, es cuestión de generar un rango de años y meses, y llenarlos con los valores correspondientes, entonces cuando ingresas el año y mes, ya lo buscas por año y mes.
Otra forma de resolverlo sería usando un Map<LocalDate, Integer> en lugar de un arreglo, de modo que tus valores de fecha te servirían de clave para obtener el peso.
Y la otra forma, más complicada pero que te permite hacerlo exclusivamente con arreglos sería usando dos arreglos, uno para las fechas (usa como referencia el primer día del mes, ejemplo: enero del 2021 sería 1/1/21, y diciembre del 2021 sería 1/12/21) y otro arreglo para los pesos:
private LocalDate[] fechas;
private int[] pesos;
Luego, en el mismo orden que tienes tus meses, tienes tus pesos, lo siguiente es que si ingresas un mes, por ejemplo que un usuario ingrese Enero del 2000, vas a buscar en fechas, así por ejemplo tu método buscar peso sería algo así:
for(int i=0; i<fechas.length; i++){
if(fechas[i].compareTo(primerDiaDelMesIngresado)==0){
return pesos[i];
}
}
Y luego, simplemente tu IMC sería: buscarPeso(primerDiaDelMes) / (estatura * estatura)
Más complicado, pero solamente usas arreglos.
Otra forma también sería con arreglos bi-dimensionales, pero ya tendrías que resolver la diferencia de los tipos de datos, ya que en bidimensional, solamente puedes tener enteros o solamente fechas.
-
Hace un par de meses tratamos este mismo ejercicio en otro tema (https://aprenderaprogramar.com/foros/index.php?topic=8014.msg29160#msg29160).
Puede que la solución ahí propuesta te sirva.
-
gracias por la ayuda me sirvieron mucho las respuestas.
saludos.