Código em Java sobre IMC

Quero saber como faz o método resultIMC , pois não sei como retornar uma instância da classe String
Crie a classe Pessoa com os campos, nome e dataNascimento. A classe Pessoa deve conter:
O método toString, que não recebe parâmetros e retorna um objeto da classe String na
seguinte forma:
Nome:
Data de Nascimento:
Crie a classe abstrata PessoaIMC que herde da classe Pessoa e contenha tenha os campos
peso e altura, ambos do tipo double. A classe PessoaIMC deve conter os seguintes métodos:
calculaIMC() que recebe como parâmetros dois valores do tipo double que são a altura e o peso
e retorna um valor do tipo double correspondente ao IMC (Índice de Massa Corporal = peso /
altura ao quadrado) calculado.
o método abstrato resultIMC() que não recebe parâmetros e retorna uma instância da classe
String.
O método toString() desta classe deve retornar uma string da seguinte forma:
Nome:
Data de Nascimento:
Peso:
Altura:
Crie as classes Homem e Mulher, herdeiras de PessoaIMC. Cada uma deve implementar o método
abstrato resultIMC() para realiza o calculo do IMC e exibe uma mensagem de resultado acordo
com o valor obtido.
Para Homem:
IMC < 20.7 : Abaixo do peso ideal
20.7 < IMC < 26.4: Peso ideal
IMC > 26.4 : Acima do peso ideal
Para Mulher:
IMC < 19 : Abaixo do peso ideal
19 < IMC < 25.8: Peso ideal
IMC > 25.8 : Acima do peso ideal
Crie uma classe teste que apresenta as seguintes opções:

  1. Cadastra Homem
  2. Cadastrar Mulher
  3. Consultar IMC (Busca pelo nome)
  4. Listar Homens
  5. Listar Mulheres
  6. Listar todos os IMCs dos Homens
  7. Listas todos os IMCs
  8. Sair

na classe Pessoa você vai criar uma função

public String calcularIMC(peso: int) {
    String resultadoIMC;
    (...)
    return resultadoIMC;
    }

e na classe Principal você vai instanciar um objeto Pessoa, e chamar a função calcularIMC(), com isso o resultado dela será uma String.

Posta aí o código que você fez até agora, para podermos ajudar de forma específica.

Seja bem vindo ao fórum!

Esse é tipo de exercício que me decepciona, um IMC não é uma Pessoa, mas segundo o exercício, é sim.
E o pior, o exercício vai adiante estruturando que Homem e Mulher são IMCs.
Por isso que tem tanto estudante com raiva de POO, os caras ensinam absurdos…
:man_shrugging:

IMC deveria ser uma classe independente, capaz de calcular o IMC de qualquer Pessoa e avaliar o IMC de Homems e Mulheres, simples assim:

public class IMC {
    
    public double calcular(Pessoa pessoa) {
        double peso = pessoa. getPeso();
        double altura = pessoa.getALtura();
        return peso / (altura * altura);
    }

    public String avaliar(Homem homem) {
        double imc = calcular(homem);
        if (imc > 26.4) {
            return "Acima do peso ideal";
        }
        if (imc > 20.7) {
            return "Peso ideal";
        }
        return "Abaixo do peso ideal"
    }
    
    public String avaliar(Mulher mulher) {
        double imc = calcular(mulher);
        if (imc > 25.8) {
            return "Acima do peso ideal";
        }
        if (imc > 19) {
            return "Peso ideal";
        }
        return "Abaixo do peso ideal"
    }
}
2 curtidas

Valeu pela sugestão ,amigo. Mas quero saber como implementar o método resultIMC.

Mas eu quero saber como implementar o método resultIMC.

Valeu pela sugestão , amigo. Mas quero saber como implementar o método resultIMC. Pois ele pede para retornar a instância de uma String.

package classe.abstrata.pkg2;

import java.util.Date;

/**
*

  • @author constantino
    */
    public abstract class PessoaIMC extends Pessoa {

    private double peso;
    private double altura;

    public PessoaIMC() {
    }

    public PessoaIMC(Double peso, Double altura, String nome, Date dataDeNascimento) {
    super(nome, dataDeNascimento);
    this.peso = peso;
    this.altura = altura;
    }

    public Double getPeso() {
    return peso;
    }

    public Double getAltura() {
    return altura;
    }

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

    public abstract String resultIMC();

    @Override
    public String toString() {
    return “Nome: “+getNome()
    +”\n”
    +“Data de Nascimento: “+getDataDeNascimento()
    +”\n”
    +“Peso: “+getPeso()
    +”\n”
    +"Altura: "+getAltura();
    }

Segundo o seu enunciado, na classe Homem vai ser assim:

public String resultIMC() {
    double imc = calculaIMC(getPeso(), getAltura());
    if (imc > 26.4) {
        return "Acima do peso ideal";
    }
    if (imc > 20.7) {
        return "Peso ideal";
    }
    return "Abaixo do peso ideal"
}

E na classe Mulher vai ser assim:

public String resultIMC() {
    double imc = calculaIMC(getPeso(), getAltura());
    if (imc > 25.8) {
        return "Acima do peso ideal";
    }
    if (imc > 19) {
        return "Peso ideal";
    }
    return "Abaixo do peso ideal"
}

Tenho perguntas acerca de sua implementação de PessoaIMC:

  • Você declarou os atributos peso e altura como sendo do tipo double.
  • No construtor da classe você está recebendo eles como Double ao invés de double.
  • Nos métodos getPeso e getAltura também está retornando Double ao invés de double.
  • No método CalculaIMC (em maiúsculo?) você recebe eles como sendo novamente do tipo double.

A pergunta é: Tem algum motivo para misturar Double e double?
Você sabe que são tipos de dados diferentes né?

1 curtida

Sim , sei. Mas às vezes não me importo muito na hora de usar.

Est[quote=“staroski, post:7, topic:410617, full:true”]

Segundo o seu enunciado, na classe Homem vai ser assim:

public String resultIMC() {
    double imc = calculaIMC(getPeso(), getAltura());
    if (imc > 26.4) {
        return "Acima do peso ideal";
    }
    if (imc > 20.7) {
        return "Peso ideal";
    }
    return "Abaixo do peso ideal"
}

E na classe Mulher vai ser assim:

public String resultIMC() {
    double imc = calculaIMC(getPeso(), getAltura());
    if (imc > 25.8) {
        return "Acima do peso ideal";
    }
    if (imc > 19) {
        return "Peso ideal";
    }
    return "Abaixo do peso ideal"
}

Tenho perguntas acerca de sua implementação de PessoaIMC:

  • Você declarou os atributos peso e altura como sendo do tipo double.
  • No construtor da classe você está recebendo eles como Double ao invés de double.
  • Nos métodos getPeso e getAltura também está retornando Double ao invés de double.
  • No método CalculaIMC (em maiúsculo?) você recebe eles como sendo novamente do tipo double.

A pergunta é: Tem algum motivo para misturar Double e double?
Você sabe que são tipos de dados diferentes né?
[/quote]

Estava duvidando da minha implementação , achava que tinha que fazer uma instância da classe String na classe abstrata. Mas fiz igualzinho ao seu. Obrigado , amigo.

Não, o enunciado diz que sua classe abstrata vai ter um método abstrato que retorna uma String.
Se o método é abstrato, quem vai fornecer a implementação concreta e retornar a instância de String será uma subclasse.
Nesse caso a subclasse Homem e a subclasse Mulher.

Mas deveria :slight_smile:

Quando você faz cálculos com os wrappers (Double, Integer, etc), é feito o autoboxing e unboxing , ou seja, há conversões implícitas de/para os respectivos tipos primitivos.

Claro que para programas pequenos como este exercício, a diferença será imperceptível, mas dependendo da aplicação, isso pode causar sim problemas de desempenho.

No caso deste exercício, não tem motivo - e nem ganho - nenhum em usar Double. Pode ser tudo double mesmo.

1 curtida