[RESOLVIDO] Comportamento do If

4 respostas
maiden
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

4 Respostas

pmlm

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.

orlandocn

alem de corrigir isso, tenha cuidado ao usar double

S
maiden:
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;);
		}
	}
}

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

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.
maiden

valeu deu certo fazendo um if por vez

Criado 20 de abril de 2013
Ultima resposta 21 de abr. de 2013
Respostas 4
Participantes 4