Ajuda com uma classe para cálculo de IMC

5 respostas
rickmachado

Olá pessoal, estou precisando resolver um pepino em uma classe que criei para a faculdade, eu preciso receber dados de N pessoas: nome, idade, sexo, peso e altura.
Após recebê-las é necessário verificar, de acordo com o sexo, qual o IMC e mostrar o resultado em tela.

Criei uma classe chamada de AtributosPessoa, onde está as variáveis, sets/gets e método de cálculo de IMC:

public class AtributosPessoa{
private String nome, sexo;
private int idade;
private double peso, altura;

public AtributosPessoa(){
nome="";
sexo="";
idade=0;
peso=0;
altura=0;

}

public AtributosPessoa(String snome, String ssexo, int sidade, double speso, double saltura){
nome=snome;
sexo=ssexo;
idade=sidade;
peso=speso;
altura=saltura;
}

public void setNome(String snome){
nome=snome;
}

public void setSexo(String ssexo){
sexo=ssexo;
}

public void setIdade(int sidade){
idade=sidade;
}

public void setPeso(double speso){
peso=speso;
}

public void setAltura(double saltura){
altura=saltura;
}

public String getNome(){
return nome;
}

public String getSexo(){
return sexo;
}

public int getIdade(){
return idade;
}

public double getPeso(){
return peso;
}

public double getAltura(){
return altura;
}

public double CalculaImc(){
return peso/(altura*altura);
}

}

E outra classe para entrar com as informações de 3 pessoas:

import javax.swing.*;
public class EntradaPessoa{
	public static void main(String args[]){
		AtributosPessoa c[]=new AtributosPessoa[3];
		for(int i=0;i<3;i++){
			c[i]=new AtributosPessoa();
	
		c[i].setNome(JOptionPane.showInputDialog("Entre com o Nome:"));
		c[i].setIdade(Integer.parseInt(JOptionPane.showInputDialog("Entre com a Idade:")));
		c[i].setSexo(JOptionPane.showInputDialog("Entre com o Sexo:"));
		c[i].setPeso(Double.parseDouble(JOptionPane.showInputDialog("Entre com o Peso:")));
		c[i].setAltura(Double.parseDouble(JOptionPane.showInputDialog("Entre com a Altura:")));
		
		}
	
}
		
	}

Até aí tudo ok, consigo até retornar o cálculo de IMC e mostrar em tela, porém não estou conseguindo fazer isso com base no sexo da pessoa cadastrada, preciso mostrar se ela está acima do peso, abaixo, na média de acordo com uma tabelinha pré-definida:


imc por contato.rickmachado, no Flickr

Alguém poderia me auxiliar nesse caso? Por favor, não pensem que quero respostas prontas, pois assim seria muito fácil, eu gostaria de entender como faço esse retorno, eu acredito que precisaria utilizar uns if para isso mas já tentei inserir como abaixo:

if(c[i].getSexo()=="F")
			if(CalculaImc<19.1)
				JOptionPane.showMessageDialog(null,"Você está abaixo do peso");
			else
				if(CalculaImc<25.8)
					JOptionPane.showMessageDialog(null,"Você está no peso ideal");
				else
					if(CalculaImc<27.3)
						JOptionPane.showMessageDialog(null,"Você está acima do peso");
		
}
		
	}
	
}

Se alguém puder me dar uma luz, agradeceria muito, pois, preciso alcançar média nessa matéria para não reprovar.

Obrigado.


[color=red]ATUALIZAÇÃO:[/color]

Olá pessoal, estou criando um esqueminha da seguinte maneira:

import javax.swing.*;
public class EntradaPessoa{
	public static void main(String args[]){
		AtributosPessoa c[]=new AtributosPessoa[100];
		for(int i=0;i<3;i++){
			c[i]=new AtributosPessoa();
	
		c[i].setNome(JOptionPane.showInputDialog("Entre com o Nome:"));
		c[i].setIdade(Integer.parseInt(JOptionPane.showInputDialog("Entre com a Idade:")));
		c[i].setSexo(JOptionPane.showInputDialog("Entre com o Sexo - (M)Masculino / (F)Feminino:"));
		c[i].setPeso(Float.parseFloat(JOptionPane.showInputDialog("Entre com o Peso:")));
		c[i].setAltura(Float.parseFloat(JOptionPane.showInputDialog("Entre com a Altura:")));
	
		if(c[i].getSexo().equalsIgnoreCase("F"))
			if(getCalculaImc()<=19.1)
				JOptionPane.showMessageDialog(null,"Você está abaixo do peso");
		else
				if(getCalculaImc<=25.8)
					JOptionPane.showMessageDialog(null,"Você está no peso ideal");
				else
					if(getCalculaImc<=27.3)
						JOptionPane.showMessageDialog(null,"Você está acima do peso");
						
		
}
		}
	}

Porém, está retornando erro nas linhas 15, 18 e 21.

Alguma dica?

5 Respostas

L

Boa tarde
A lógica é você fazer comparação para verificar o sexo mesmo, experimente comparar desta forma c[i].getSexo().equals("F")

rickmachado

Olá, obrigado por responder leandrocesar09, então, eu preciso mesmo usar getSexo para pegar os dados armazenados na variável sexo, e depois fazer o comparativo. É isso?

Obrigado;

L

Isso mesmo, pelo que entendi, somente através dessa variável(sexo) você vai conseguir distinguir qual cálculo usar, sempre use equals para comparar strings e nao ==. Flow

rickmachado

Obrigado leandrocesar09, vou testar sua dica. Abraço!

rickmachado

Concluído!!!

Consegui terminar todo o meu programa de IMC.

Ainda não postarei aqui por que preciso enviar para o Professor, assim que ele corrigir e der a nota eu libero ele aqui no GUJ.

Abraço!

Criado 21 de setembro de 2011
Ultima resposta 21 de set. de 2011
Respostas 5
Participantes 2