Cálculo de IMC masculino e feminino

Já estou há um tempo tentando resolver esse problema, mas sempre está dando erro e não sei mais o que tentar. Gostaria de pedir a ajuda de vocês para que olhassem o código que fiz e, se possível, apontassem o erro.

Primeiro devo definir uma classe com os atributos privados: nome, idade, sexo, peso e altura. E além dos métodos públicos de acesso aos atributos, criar dois novos métodos: calculoDoIMC (para calcular o índice de massa corporal da pessoa) e avaliacaoDoIMC (para retornar a condição de acordo com a tabela acima.) Abaixo segue o código que criei:

public class Pessoa {
	private String nome, sexo, avaliacaoDoIMC;
	private int idade;
	private float peso, altura;

public Pessoa(){
	nome="";
	sexo="";
	idade=0;
	peso=0;
	altura=0;
	avaliacaoDoIMC="";
}

public Pessoa(String bnome, String bsexo, int bidade, float bpeso, float baltura, String bavaliacao){
nome=bnome;  
sexo=bsexo;  
idade=bidade;  
peso=bpeso;  
altura=baltura;
avaliacaoDoIMC=bavaliacao;
}

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

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

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

public void setPeso(float bpeso){
	peso=bpeso;
}

public void setAltura(float baltura){
	altura=baltura;
}

public void setAvaliacaoDoIMC(String bavaliacao){
	avaliacaoDoIMC=bavaliacao;
}

public String getNome(){
	return nome;
}

public String getSexo(){
	return sexo;
}

public int getIdade(){
	return idade;
}

public float getPeso(){
	return peso;
}

public float getAltura(){
	return altura;
}

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


}[/code]

Aparentemente não tem erro, pelo menos quando compilo ele não acusa nenhum. Meu problema está na segunda parte: criar uma classe para testar o programa que leia os dados de N pessoas, armazene em um vetor e ao final exiba na tela o nome, o IMC e a avaliação de cada pessoa. Segue abaixo o código que criei:

[code]import javax.swing.*;
 
public class AtributosPessoa{  
    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("Digite o nome."));  
        c[i].setIdade(Integer.parseInt(JOptionPane.showInputDialog("Digite a sua idade.")));  
        c[i].setSexo(JOptionPane.showInputDialog("Digite o seu sexo: M para masculino e F para feminino."));  
        c[i].setPeso(Float.parseFloat(JOptionPane.showInputDialog("Digite o seu peso.")));  
        c[i].setAltura(Float.parseFloat(JOptionPane.showInputDialog("Digite a sua altura.")));  
      
        if(c[i].getSexo().equals("F"))  
	if(getCalculoDoIMC<19.1)  
                JOptionPane.showMessageDialog(null,"Olá, " +c[i].getNome+ ", seu IMC é " +c[i].getCalculoDoIMC+ " e você está abaixo do peso ideal");  
        else  	
	if((getCalculoDoIMC>19.1)&&(getCalculoDoIMC<25.8))  
		JOptionPane.showMessageDialog(null,"Olá, " +c[i].getNome+ ", seu IMC é " +c[i].getCalculoDoIMC+ " e você está no peso ideal");  
	else  
	if((getCalculoDoIMC>25.8)&&(getCalculoDoIMC<27.3))  
		JOptionPane.showMessageDialog(null,"Olá, " +c[i].getNome+ ", seu IMC é " +c[i].getCalculoDoIMC+ " e você está marginalmente acima do peso ideal");
	else
	if((getCalculoDoIMC>27.3)&&(getCalculoDoIMC<32.3))
		JOptionPane.showMessageDialog(null,"Olá, " +c[i].getNome+ ", seu IMC é " +c[i].getCalculoDoIMC+ " e você está acima do peso ideal"); 
	else
	if(getCalculoDoIMC>32.3)
		JOptionPane.showMessageDialog(null,"Olá, " +c[i].getNome+ ", seu IMC é " +c[i].getCalculoDoIMC+ " e você está obeso"); 	


        if(c[i].getSexo().equals("M"))  
	if(getCalculoDoIMC<20.7)  
                JOptionPane.showMessageDialog(null,"Olá, " +c[i].getNome+ ", seu IMC é " +c[i].getCalculoDoIMC+ " e você está abaixo do peso ideal");  
        else  	
	if((getCalculoDoIMC>20.7)&&(getCalculoDoIMC<26.4))  
		JOptionPane.showMessageDialog(null,"Olá, " +c[i].getNome+ ", seu IMC é " +c[i].getCalculoDoIMC+ " e você está no peso ideal");  
	else  
	if((getCalculoDoIMC>26.4)&&(getCalculoDoIMC<27.8))  
		JOptionPane.showMessageDialog(null,"Olá, " +c[i].getNome+ ", seu IMC é " +c[i].getCalculoDoIMC+ " e você está marginalmente acima do peso ideal");
	else
	if((getCalculoDoIMC>27.8)&&(getCalculoDoIMC<31.1))
		JOptionPane.showMessageDialog(null,"Olá, " +c[i].getNome+ ", seu IMC é " +c[i].getCalculoDoIMC+ " e você está acima do peso ideal"); 
	else
	if(getCalculoDoIMC>31.1)
		JOptionPane.showMessageDialog(null,"Olá, " +c[i].getNome+ ", seu IMC é " +c[i].getCalculoDoIMC+ " e você está obeso"); 	
                         
}  
}  
}

O que está faltando? O que está errado?

Boa tarde.

Criar uma flag pode resolver seu problema tranquilamente.

int continuar = JOptionPane.NO_OPTION;
		
do{
   //Captura dos dados.			
} while (continuar == JOptionPane.YES_OPTION);

Crie uma List para solucuinar o problema da quantidade.

Espero ter ajudado.

Experimente ai… tem mais coisas para melhorar ainda, testei só as comparações [code] public class AtributosPessoa {

public static void main(String args[]) {

    Pessoa c[] = new Pessoa[3];
    for (int i = 0; i < 3; i++) {
        c[i] = new Pessoa();

        c[i].setNome(JOptionPane.showInputDialog("Digite o nome."));
        c[i].setIdade(Integer.parseInt(JOptionPane.showInputDialog("Digite a sua idade.")));
        c[i].setSexo(JOptionPane.showInputDialog("Digite o seu sexo: M para masculino e F para feminino."));
        c[i].setPeso(Float.parseFloat(JOptionPane.showInputDialog("Digite o seu peso.")));
        c[i].setAltura(Float.parseFloat(JOptionPane.showInputDialog("Digite a sua altura.")));
        
        double IMC = c[i].getCalculoDoIMC();
        if (c[i].getSexo().equals("F")) {
            if (IMC < 19.1) {
                JOptionPane.showMessageDialog(null, "Olá, " + c[i].getNome() + ", seu IMC é " + IMC + " e você está abaixo do peso ideal");
            } else if ((IMC > 19.1) && (IMC < 25.8)) {
                JOptionPane.showMessageDialog(null, "Olá, " + c[i].getNome() + ", seu IMC é " + IMC + " e você está no peso ideal");
            } else if ((IMC > 25.8) && (IMC < 27.3)) {
                JOptionPane.showMessageDialog(null, "Olá, " + c[i].getNome() + ", seu IMC é " + IMC + " e você está marginalmente acima do peso ideal");
            } else if ((IMC > 27.3) && (IMC < 32.3)) {
                JOptionPane.showMessageDialog(null, "Olá, " + c[i].getNome() + ", seu IMC é " + IMC + " e você está acima do peso ideal");
            } else if (IMC > 32.3) {
                JOptionPane.showMessageDialog(null, "Olá, " + c[i].getNome() + ", seu IMC é " + IMC + " e você está obeso");
            }
        }else if(c[i].getSexo().equals("M")){
            //calculo IMC masculino
        }
    }
}

}
[/code]

Muito obrigada!! Dei umas melhoradas por causa das dicas que vocês deram e o segundo código ficou da seguinte forma:

[code] public class AtributosPessoa {

    public static void main(String args[]) {  
  
        int continuar = JOptionPane.NO_OPTION;  
      
    do{

    Pessoa c[] = new Pessoa[3];  
        for (int i = 0; i < 3; i++) {  
            c[i] = new Pessoa();  
  
            c[i].setNome(JOptionPane.showInputDialog("Digite o nome."));  
            c[i].setIdade(Integer.parseInt(JOptionPane.showInputDialog("Digite a sua idade.")));  
            c[i].setSexo(JOptionPane.showInputDialog("Digite o seu sexo: M para masculino e F para feminino."));  
            c[i].setPeso(Float.parseFloat(JOptionPane.showInputDialog("Digite o seu peso.")));  
            c[i].setAltura(Float.parseFloat(JOptionPane.showInputDialog("Digite a sua altura.")));  
              
            double IMC = c[i].getCalculoDoIMC(); 

	} while (continuar == JOptionPane.YES_OPTION);

            if (c[i].getSexo().equals("F")) {  
                if (IMC < 19.1) {  
                    JOptionPane.showMessageDialog(null, "Olá, " + c[i].getNome() + ", seu IMC é " + IMC + " e você está abaixo do peso ideal");  
                } else if ((IMC > 19.1) && (IMC < 25.8)) {  
                    JOptionPane.showMessageDialog(null, "Olá, " + c[i].getNome() + ", seu IMC é " + IMC + " e você está no peso ideal");  
                } else if ((IMC > 25.8) && (IMC < 27.3)) {  
                    JOptionPane.showMessageDialog(null, "Olá, " + c[i].getNome() + ", seu IMC é " + IMC + " e você está marginalmente acima do peso ideal");  
                } else if ((IMC > 27.3) && (IMC < 32.3)) {  
                    JOptionPane.showMessageDialog(null, "Olá, " + c[i].getNome() + ", seu IMC é " + IMC + " e você está acima do peso ideal");  
                } else if (IMC > 32.3) {  
                    JOptionPane.showMessageDialog(null, "Olá, " + c[i].getNome() + ", seu IMC é " + IMC + " e você está obeso");  
                }  

            }else if (c[i].getSexo().equals("M")){  
                  if (IMC < 20.7) {
		JOptionPane.showMessageDialog(null, "Olá, " + c[i].getNome() + ", seu IMC é " + IMC + " e você está abaixo do peso ideal");
	} else if ((IMC>20.7) && (IMC<26.4))  {  
    		JOptionPane.showMessageDialog(null,"Olá, " + c[i].getNome() + ", seu IMC é " + IMC + " e você está no peso ideal");    
		} else if ((IMC>26.4) && (IMC<27.8)) {  
    		JOptionPane.showMessageDialog(null,"Olá, " + c[i].getNome() + ", seu IMC é " + IMC + " e você está marginalmente acima do peso ideal");  
		} else if((IMC>27.8) && (IMC<31.1)) {
    		JOptionPane.showMessageDialog(null,"Olá, " + c[i].getNome() + ", seu IMC é " + IMC + " e você está acima do peso ideal");   
		} else if(getCalculoDoIMC>31.1) {  
   			JOptionPane.showMessageDialog(null,"Olá, " + c[i].getNome() + ", seu IMC é " + IMC + " e você está obeso");      
            }  
        }  
    }  
}  [/code]

Pelo menos quando eu ia compilar aparecia mais de 40 erros e agora estão aparecendo “só” 2. São os seguintes:

Entre as dicas que vocês deram só não soube como criar uma “list”. Peço desculpas, pois eu sou muito iniciante. Há uns 3 meses atrás Java para mim não passava de vontade, só agora comecei a estudar.

Bom dia.

Toda grande jornada se inicia com o primeiro passo.

Todos, sem exceção, tiveram um começo.

List <tipoObjeto> lista = new ArrayList <tipoObjeto> ();

lista.add() //adicionar os valores ao objeto.

Exemplo facilmente de ser moldado as suas necessidades.

Caso a dúvida ainda persista, dê uma vasculhada rápida no fórum, pois esta é e foi a mesma de muita gente, vai ser fácil encontrar algo útil.

Boa sorte com seus estudos.

Sem mais.

Para a parte que você usa para validar o sexo e o IMC da pessoa, vale a pena dar uma olhada na solução que postei nesse tópico: http://www.guj.com.br/java/253340-problema-para-comparar-valores.