[RESOLVIDO] Comportamento do If

import java.util.*;
public class IMC {
	
	public static void main(String[] args) {
		
		double pesoPessoa;
		double alturaPessoa;
		
		Scanner iou = new Scanner(System.in);
		
		System.out.println("digite o peso em kg: ");
		pesoPessoa = iou.nextDouble();
		
		System.out.println("digite a altura em metros: ");
		alturaPessoa = iou.nextDouble();
		
		IMC abc = new IMC();
		abc.calcularIMC(pesoPessoa, alturaPessoa);
		
	}
	
	public void calcularIMC(double peso, double altura){
		
		double Imc1 = peso / (altura * altura);
		
		if(Imc1 < 18.5){
			System.out.println("abaixo do peso");
		} else if (Imc1 >= 18.5 && Imc1 <= 24.9){
			System.out.println("peso normal");
		} else if (Imc1 >= 25 && Imc1 <= 29.9){
			System.out.println("Acima do peso");
		}else {
			System.out.println("Você está obeso!");
		}
	}
}

O problema desse codigo é que quando coloco 68 kilos e 1,65 metros o calculo seria
Imc = 68 / (1,65*1,65);
Imc = 24,97

o erro está no if (Imc1 >= 18.5 && Imc1 <= 24.9) que deve aparece uma mensagem dizendo "peso normal",
mas como tem uma casa decimal a mais que 24.9 ele deveria ir para o segundo if (Imc1 >= 25 && Imc1 <= 29.9)
com a mensagem "Acima do peso", só que ele esta indo para a ultima mensagem "Voce esta obeso" Como faço para
resolver isso?

obs: sendo que não pode alterar o if ja que é um dado da questão

Se é 24,97 não é maior do que 25 logo não vai entrar no if que tu queres.

Conforme fizeste para o 18.5, que usaste menor num if e maior ou igual no outro, deves fazer para este caso e usar 24.9 ou 25 nos dois if, com o igual em uma das condições.

alem de corrigir isso, tenha cuidado ao usar double

[quote=maiden][code]
import java.util.*;
public class IMC {

public static void main(String[] args) {
	
	double pesoPessoa;
	double alturaPessoa;
	
	Scanner iou = new Scanner(System.in);
	
	System.out.println(&quot;digite o peso em kg: &quot;);
	pesoPessoa = iou.nextDouble();
	
	System.out.println(&quot;digite a altura em metros: &quot;);
	alturaPessoa = iou.nextDouble();
	
	IMC abc = new IMC();
	abc.calcularIMC(pesoPessoa, alturaPessoa);
	
}

public void calcularIMC(double peso, double altura){
	
	double Imc1 = peso / (altura * altura);
	
	if(Imc1 &lt; 18.5){
		System.out.println(&quot;abaixo do peso&quot;);
	} else if (Imc1 &gt;= 18.5 && Imc1 &lt;= 24.9){
		System.out.println(&quot;peso normal&quot;);
	} else if (Imc1 &gt;= 25 && Imc1 &lt;= 29.9){
		System.out.println(&quot;Acima do peso&quot;);
	}else {
		System.out.println(&quot;Você está obeso!&quot;);
	}
}

}
[/code]

O problema desse codigo é que quando coloco 68 kilos e 1,65 metros o calculo seria
Imc = 68 / (1,65*1,65);
Imc = 24,97

o erro está no if (Imc1 >= 18.5 && Imc1 <= 24.9) que deve aparece uma mensagem dizendo "peso normal",
mas como tem uma casa decimal a mais que 24.9 ele deveria ir para o segundo if (Imc1 >= 25 && Imc1 <= 29.9)
com a mensagem "Acima do peso", só que ele esta indo para a ultima mensagem "Voce esta obeso" Como faço para
resolver isso?

obs: sendo que não pode alterar o if ja que é um dado da questão[/quote]

Aconselho a fazer apenas um teste por [color=blue]if[/color] nesse caso - se o número não for menor que 18.5, vai ser maior ou igual a 18.5 no [color=blue]else[/color]

if (imc1 &lt; 18.5) {
    ...
} else if (imc1 &lt; 25.0) {
    ...
} else if (imc1 &lt; 30.0) {
    ...
} else {   // &gt;= 30.0
    ...
}

Obs: por convenção variáveis em Java devem iniciar com letra minúscula.

valeu deu certo fazendo um if por vez