Pessoal, sou iniciante em Java e estou estudando os conceitos de orientação a objeto em Java. Pensando nisso, desenvolvi um programinha básico de cálculo de IMC em linha de comando, sempre procurando deixar o main o mais limpo possível (só chamando os métodos), sem construir nada ali. O programa tem apenas 2 classes e faz um teste de input do usuário, pra evitar que este digite valores inválidos.
A questão é que essa validação fica repetida, porque ele checa peso e depois checa altura, com código duplicado. Eu gostaria que vocês me dessem alguma sugestão pra eliminar a necessidade de ter esse código de validação duplicado. Eu deveria criar um método checaDados? Uma outra classe? Estou um pouco perdido.
Agradeço qualquer ajuda. Segue o código das duas classes:
package calculoIMC;
import java.util.Scanner;
public class IMC {
//public static void main(String[] args) {
private Scanner sc = new Scanner(System.in);
private double peso, altura;
void obterDados(){
System.out.println("Digite seu peso em quilos: ");
while (!sc.hasNextDouble()){ //enquanto input != double
System.out.println("Digite numeros apenas!");
sc.next(); //Faz o loop
}
peso = sc.nextDouble();
System.out.println("Digite sua altura: ");
while (!sc.hasNextDouble()){
System.out.println("Digite numeros apenas!");
sc.next();
}
altura = sc.nextDouble();
}
void calcularIMC(){
final double formula = peso / (altura*altura);
if (formula < 17){
System.out.printf("Seu IMC: %.2f\n", formula); //usar PRINTF e "%.2f"
System.out.println("Muito abaixo do peso");
}
else if ((formula > 17) && (formula < 18.49)){
System.out.printf("Seu IMC: %.2f\n", formula);
System.out.println("Abaixo do peso");
}
else if ((formula > 18.5 && formula < 24.99)){
System.out.printf("Seu IMC: %.2f\n", formula);
System.out.println("Peso normal");
}
else if ((formula > 25 && formula < 29.99)){
System.out.printf("Seu IMC: %.2f\n", formula);
System.out.println("Acima do peso");
}
else if ((formula > 30 && formula < 34.99)){
System.out.printf("Seu IMC: %.2f\n", formula);
System.out.println("Obesidade I");
}
else if ((formula > 35 && formula < 39.99)){
System.out.printf("Seu IMC: %.2f\n", formula);
System.out.println("Obesidade II (severa)");
}
else if (formula > 40){
System.out.printf("Seu IMC: %.2f\n", formula);
System.out.println("Obesidade III (morbida)");
}
}
}
package calculoIMC;
public class IMCTeste {
public static void main(String[] args) {
IMC corpo1 = new IMC();
corpo1.obterDados();
corpo1.calcularIMC();
}
}