Calculo IMC
Olá pessoal. Sou iniciante em JAVA e tenho um exercicio, qual não consegui ainda solucionar. Por favor, se alguem puder colaborar dando dicas, me auxiliando a compreender e a resolver o mesmo ficarei muito grato.
[Exercicio]
Defina uma classe Java para representar uma pessoa. Uma pessoa, no nosso caso, possui os seguintes atributos: Nome, Idade, Altura, Peso, Sexo.
A classe deve possuir um método para calcular o IMC (Índice de Massa Corpórea) de uma pessoa e mostrar de acordo com os índices abaixo, sua categoria. O IMC é obtido através da divisão do peso pela altura ao quadrado e é interpretado da seguinte forma:
• IMC <= 18,5: Abaixo do peso normal
• 18,5 < IMC <= 25: Peso Normal
• 25 < IMC <= 30: Acima do peso normal.
• IMC > 30: Obesidade
IMC.java
public class IMC {
public float CalculoImc(float peso, float altura){
float imc;
imc=(peso)/(altura*altura);
return imc;
}
}
PessoaCalculoIMC.java
import javax.swing.JOptionPane;
public class PessoaCalculoIMC {
public static void main(String args[]){
IMC a=new IMC();
float ResultadoIMC;
String Peso=JOptionPane.showInputDialog("Digite o Peso");
float peso=Float.parseFloat(Peso);
String Altura=JOptionPane.showInputDialog("Digite a Altura");
float altura=Float.parseFloat(Altura);
ResultadoIMC=a.CalculoImc(peso, altura);
System.out.println(ResultadoIMC);
if (ResultadoIMC<=18.5)
System.out.println("Abaixo do peso normal");
if (18.5 < ResultadoIMC && ResultadoIMC <= 25)
System.out.println("Peso normal");
if (25 < ResultadoIMC && ResultadoIMC<=30);
System.out.println("Acima do peso normal");
if( ResultadoIMC > 30)
System.out.println("Obsidade");
}
}
Bem consegui fazer até aqui.
Segue as dúvidas:
1º O calculo as vezes apresenta duas resposta, será que errei no IF ou no &&?
2º Observei que se digitar (,) na altura o programa da erro. Como faço para aceitar a virgula na digitação? (ou é sempre ponto que se usa mesmo?)
3º Fiz uma classe pessoa em separado com os atributos, porem ainda estou em dúvida de como usar. É possivel colocar estes atributos dentro na classe IMC.java?
Muitas duvidas né? por favor pessoal preciso de um norte ai pra tentar solucionar o exercício.
Obrigado.[/b][/code]
Eduardo Galloo
Curtidas 0
Respostas
Eduardo Galloo
09/04/2009
[quote="eduardo.gallo"]Olá pessoal. Sou iniciante em JAVA e tenho um exercicio, qual não consegui ainda solucionar. Por favor, se alguem puder colaborar dando dicas, me auxiliando a compreender e a resolver o mesmo ficarei muito grato.
[Exercicio]
Defina uma classe Java para representar uma pessoa. Uma pessoa, no nosso caso, possui os seguintes atributos: Nome, Idade, Altura, Peso, Sexo.
A classe deve possuir um método para calcular o IMC (Índice de Massa Corpórea) de uma pessoa e mostrar de acordo com os índices abaixo, sua categoria. O IMC é obtido através da divisão do peso pela altura ao quadrado e é interpretado da seguinte forma:
• IMC <= 18,5: Abaixo do peso normal
• 18,5 < IMC <= 25: Peso Normal
• 25 < IMC <= 30: Acima do peso normal.
• IMC > 30: Obesidade
IMC.java
public class IMC {
public float CalculoImc(float peso, float altura){
float imc;
imc=(peso)/(altura*altura);
return imc;
}
}
PessoaCalculoIMC.java
import javax.swing.JOptionPane;
public class PessoaCalculoIMC {
public static void main(String args[]){
IMC a=new IMC();
float ResultadoIMC;
String Peso=JOptionPane.showInputDialog("Digite o Peso");
float peso=Float.parseFloat(Peso);
String Altura=JOptionPane.showInputDialog("Digite a Altura");
float altura=Float.parseFloat(Altura);
ResultadoIMC=a.CalculoImc(peso, altura);
System.out.println(ResultadoIMC);
if (ResultadoIMC<=18.5)
System.out.println("Abaixo do peso normal");
if (18.5 < ResultadoIMC && ResultadoIMC <= 25)
System.out.println("Peso normal");
if (25 < ResultadoIMC && ResultadoIMC<=30);
System.out.println("Acima do peso normal");
if( ResultadoIMC > 30)
System.out.println("Obsidade");
}
}
Bem consegui fazer até aqui.
Segue as dúvidas:
1º O calculo as vezes apresenta duas resposta, será que errei no IF ou no &&?
2º Observei que se digitar (,) na altura o programa da erro. Como faço para aceitar a virgula na digitação? (ou é sempre ponto que se usa mesmo?)
3º Fiz uma classe pessoa em separado com os atributos, porem ainda estou em dúvida de como usar. É possivel colocar estes atributos dentro na classe IMC.java?
Muitas duvidas né? por favor pessoal preciso de um norte ai pra tentar solucionar o exercício.
Obrigado.[/b][/code]
1 - coloque if - else ao invés de ifs separados. Melhora inclusive o desempenho.
3 - Bom pelo meu entendimento, você teria que criar uma pessoa na classe PessoaCalculoIMC e preencher os dados dessa pessoa. Você poderia colocar os JOptionPane no construtor dessa classe. Dessa forma quando vc colocasse Pessoa p = new Pessoa() na classe PessoaCalculoIMC ele já pediria ao usuário pra digitar os atributos daquela pessoa. E a sua classe IMC poderia ter uma função que retornasse void e tivesse como parâmetro uma pessoa. Eu colocaria um atributo float imc na classe pessoa. Assim quando vc chamasse a função calculoIMC(pessoa p) você já guardaria o imc no objeto p.
[]s
Gunnar
GOSTEI 0
Eduardo Galloo
09/04/2009
Obrigado pela colaboração. Coloquei os if / else conforme sugerido e esta funcionando perfeitamente.
A minha dúvida agora é de como implementar a classe pessoa, ou seja, pegar nesta classe que solicita os valores da altura e peso os outros atributos de uma unica vez e imprimir de uma vez só.
Exemplo:
Nome: Eduardo
Idade: 26
Altura: 1.80
Peso: 80
Sexo: Masculino
IMC: 24.69136
Acima do Peso
Grato.
GOSTEI 0
Eduardo Galloo
09/04/2009
[quote="eduardo.gallo"]Obrigado pela colaboração. Coloquei os if / else conforme sugerido e esta funcionando perfeitamente.
A minha dúvida agora é de como implementar a classe pessoa, ou seja, pegar nesta classe que solicita os valores da altura e peso os outros atributos de uma unica vez e imprimir de uma vez só.
Exemplo:
Nome: Eduardo
Idade: 26
Altura: 1.80
Peso: 80
Sexo: Masculino
IMC: 24.69136
Acima do Peso
Grato.
Pois é. Na classe Pessoa
vai ser assim (na minha concepção)
class Pessoa{
private float imc;
private String nome;
private float altura;
private int idade;
private String sexo;
public Pessoa(){
nome = JOptionPane.showInputDialog("Digite o nome da pessoa:");
//e assim por diante para cada atributo da pessoa.
}
//faça get e setter para os atributos
}
GOSTEI 0
Eduardo Galloo
09/04/2009
Obrigado pela dica. Vou implementar e ver o resultado.
Só uma curiosidade no momento. Ainda não aprendi sobre o "private".
O que significa este private?
GOSTEI 0
Eduardo Galloo
09/04/2009
significa que a variável ou método só pode ser acessar de dentro da própria classe
GOSTEI 0