Opa Wellington, tudo tranquilo?
Pelo o que eu estou vendo, como o resultado do IMC é ~30, ele acaba entrando em várias condições diferentes.
Eu fui vendo um por um o que deu de errado, mas a verdade é que a solução é bem mais simples e parece que só houve uma confusão na hora de colocar os sinais de comparação <= e >=. Então se quiser saber a solução logo de cara pode pular para o final da resposta! Mas enfim, vamos lá:
Para resolver isso, precisamos mudar as condições contidas nos ifs. Analisando cada if separadamente, vemos que algumas condições acabam sendo verdadeiras para um mesmo valor:
if (imc >= 18.5) {
System.out.println("Sua Classificação é de Magreza");
Na primeira condição, o ideal é que nós possamos limitar o escopo dela. Ou seja, da forma como ela está agora, QUALQUER valor acima de 18.5 vai acabar caindo nela. Por ser Classificação é de Magreza, acredito que o correto seria inverter o sinal de >= (maior ou igual) para <= (menor ou igual).
else if (imc <= 18.5 && imc >= 24.9) ;{
System.out.println("Sua Classificação Está Dentro do Normal");
Essa segunda condição nunca será verdadeira, pois é impossível um número ser menor ou igual a 18.5 e maior ou igual a 24.9 ao mesmo tempo. O motivo da mensagem dessa condição estar sendo exibida mesmo sabendo disso, é por conta do ; (ponto e vírgula) antes das chaves.
if (imc <= 25.0 && imc >= 29.9) {
System.out.println("Sua Classificação é de Sobrepeso I");
Aqui o ideal é deixar como else if assim como os outros para evitar fazer novas comparações. Ou seja, mesmo que uma das condições anteriores fossem verdadeiras e já não houvesse mais necessidade de realizar outras comparações, ainda assim o programa rodaria essa comparação por ser um if e não um else if. Além de também ser impossível um número ser menor ou igual a 25.0 e maior ou igual a 29.9 ao mesmo tempo
else if (imc <= 30.0 && imc >= 39.9) {
System.out.println("Sua Classificação é Obesidade II");
Aqui é o mesmo caso das condições anteriores, um número não pode ser menor ou igual a 30.0 e maior ou igual a 39.9 ao mesmo tempo. Portanto essa condição nunca será verdadeira.
else if (imc <= 40.0 ) {
System.out.println("Sua Classificação é Obesidade Grave III");
Por fim, temos a última condição que, assim como o primeiro if, quase sempre será verdadeira já que as duas condições anteriores sempre serão falsas e QUALQUER valor abaixo de 40.0 vai acabar caindo nela.
Parece muita coisa? Pois na verdade não é, basta você tirar aquele ponto e vírgula perdido antes das chaves da segunda condição, trocar o if da terceira condição por else if e inverter todos os sinais de >= (maior ou igual) para <= (menor ou igual) e vice-versa.
Espero que isso ajude. Se ficou alguma dúvida é só avisar!
Bons estudos!!