Para conseguir el peso, quizás te resulte más fácil hacerlo así:
public Paciente(String rut, String nombre, int edad, char sexo) {
this.rut = rut;
this.nombre = nombre;
this.edad = edad;
this.sexo = sexo;
pesoMensual = new int[12];
Random azar = new Random();
for (int i = 0; i < 12; i++)
pesoMensual[i] = azar.nextInt(251-70) + 70;
}
Para calcular el índice de masa corporal, necesitas un método que reciba la estatura del paciente (valor float o double) y el número de mes (un int entre 0 y 11) para seleccionar uno de los pesos mensuales del array.
Aunque el enunciado especifica que este calculo se hará sobre el peso el mes de Noviembre (que sería el 10), pero yo igualmente escribiría el método de manera que estuviera pensado para poder seleccionar cualquier mes.
El resultado de calcular el IMC, puesto que es el resultado de una división, será un resultado float / double. Pero puedes optar por retornarlo como int si así lo prefieres.
private float indiceMasaCorporal(float estatura, int mes) {
return pesoMensual[mes] / (estatura * estatura);
}
Bien, con esto se puede calcular el IMC, pero en realidad este sería un método de "apoyo". El menú de la aplicación lo que pedirá es que según en que rango se encuentre el IMC calculado para Noviembre, se retornen unos mensajes tipo: "Normal", "SobrePeso", "Obeso"
Esta parte del enunciado, podría estar incompleta, ya que no se específica cuál mensaje debe aparecer en el caso de que el IMC fuese inferior a 15.
Quien escribiese este enunciado parece que no le importa este posible caso, pero el problema es que al compilador de Java sí le va a importar.
Cuando el "retorno" de un método depende de uno o varios condicionales, estos han de contemplar TODAS las posibilidades.
No podemos hacer un método en el que le digamos a Java: - si el peso es igual o mayor a 15, retorna un String que diga "Normal"
Porque el compilador nos dirá: - Vale, me has dicho qué tengo que hacer si es igual o mayor que 15, pero no me estás diciendo qué tengo que hacer en el posible caso contrario. (que sea menor que 15)
Así que aunque el enunciado no lo indique, vamos a tener que escribir el método de forma que sí tenga en cuenta esa posibilidad.
Este método lo que haría sería primero calcular el IMC apoyándose en el método escrito antes.
Y una vez tenga el IMC, retornar un String con distintos mensajes, según en que rango se encuentre el IMC.
public String pesoMesX(float estatura, int mes) {
float imc = indiceMasaCorporal(estatura, mes);
if (imc < 15)
return "Inferior a Normal";
else if (imc >= 15 && imc < 20)
return "Normal";
else if (imc >= 20 && imc < 28)
return "SobrePeso";
else
return "Obeso";
}
Como ves, los if y else están escritos de manera que se contemplan TODAS las posibilidades, incluso las que en realidad sabemos que jamás van a ocurrir, como que por ejemplo el IMC calculado fuese un valor negativo (es decir, menor que 15).
O que el IMC calculado fuese 24.500.000 (es decir, mayor o igual que 28)
Nosotros como programadores sabemos que nunca vamos a obtener esos resultados tan absurdos, pero el compilador "no lo sabe", y por eso nos va a obligar a escribir el código de manera que haya un "retorno" garantizado, incluso para las situaciones más absurdas.