How to make a method that compares values from two objects?

Asked

Viewed 97 times

0

Given the following Java algorithm that calculates BMI:

class Pessoa {
    String nome;
    double peso, altura;

    double calculaIMC () {
        return peso / (altura * altura);
    }

    String avaliaIMC () {
        double imc = calculaIMC();
        if (imc < 18.5)
            return "abaixo do peso!!!";
        if (imc >= 18.5 && imc <= 25)
            return "com peso normal.";
        if (imc > 25 && imc <= 30)
            return "acima do peso!";
                return "obeso!!!";
    }

}


import javax.swing.JOptionPane;

   class Teste {
        public static void main (String args[]) {
            Pessoa p = new Pessoa();
            Pessoa p2 = new Pessoa();

            p.nome = JOptionPane.showInputDialog("Entre com seu nome");
            p.altura = Double.parseDouble(
            JOptionPane.showInputDialog("Entre com sua altura"));
            p.peso = Double.parseDouble(
            JOptionPane.showInputDialog("Entre com seu peso"));
            JOptionPane.showMessageDialog(null,"" + p.nome + " seu IMC = " + p.calculaIMC());
            JOptionPane.showMessageDialog(null,
            "Isto significa que voce estah " + p.avaliaIMC());

            p2.nome = JOptionPane.showInputDialog("Entre com seu nome");
            p2.altura = Double.parseDouble(
            JOptionPane.showInputDialog("Entre com sua altura"));
            p2.peso = Double.parseDouble(
            JOptionPane.showInputDialog("Entre com seu peso"));
            JOptionPane.showMessageDialog(null,"" + p2.nome + " seu IMC = " + p2.calculaIMC());
            JOptionPane.showMessageDialog(null,
            "Isto significa que voce estah " + p2.avaliaIMC());


            if(p.calculaIMC()>p2.calculaIMC())
                JOptionPane.showMessageDialog(null, p.nome + " eh mais obeso");
            else
                JOptionPane.showMessageDialog(null, p2.nome + " eh mais obeso");

    }

    }

Is there any way that conditional test of the end of the code could be done through a method defined in the Person class? If yes, how do I pass the imc of each object as parameter?

2 answers

1

Yes, it is possible. How do you want to do it? What is your modeling?

I can run a list of people and get the highest BMI. This does not belong to an object of the person class, but maybe it can belong to the class, so I’m going to define it as static.

public static Pessoa getPessoaMaiorIMC(Pessoa ...pessoas) {
  if (pessoas.length == 0) {
    return null;
  }
  Pessoa aquelaMaiorImc = pessoas [0];

  for (int i = 1; i < pessoas.length; i++) {
    Pessoa candidato = pessoas[i];
    if (candidato.calculaIMC() > aquelaMaiorImc.calculaIMC()) {
      aquelaMaiorImc = candidato;
    }
  }
  return aquelaMaiorImc;
}

To get the highest BMI, you would call the method by passing all the people involved. For example, you could exchange the end of your code for:

Pessoa aquelaMaiorImc = Pessoa.getPessoaMaiorIMC(p, p2);
JOptionPane.showMessageDialog(null, aquelaMaiorImc.nome + " eh mais obeso");

0

Buddy, follow the code with the encapsulated methods:

public class Pessoa {
    private String nome;
    private double peso, altura;

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public double getPeso() {
        return peso;
    }

    public void setPeso(double peso) {
        this.peso = peso;
    }

    public double getAltura() {
        return altura;
    }

    public void setAltura(double altura) {
        this.altura = altura;
    }

    double calculaIMC () {
        return peso / (altura * altura);
    }

    String avaliaIMC () {
        double imc = calculaIMC();
        if (imc < 18.5)
            return "abaixo do peso!!!";
        else
        if (imc >= 18.5 && imc <= 25)
            return "com peso normal.";
        else
        if (imc > 25 && imc <= 30)
            return "acima do peso!";
        else
            return "obeso!!!";
    }

    int comparaIMC(Pessoa p2)
    {
        if(this.calculaIMC()>p2.calculaIMC())
            return 1;
        else
        if (this.calculaIMC()<p2.calculaIMC())
            return 2;
        else
            return 0;
    }

    String comparaIMCMensagem(Pessoa p2)
    {
        String retorno = "";    
        switch(comparaIMC(p2))
        {   
            case 0:
            {
                retorno = "Pesos iguais";
                break;
            }
            case 1:
            {
                retorno = this.getNome() + " mais pesado";
                break;
            }
            case 2:
            {
                retorno = p2.getNome() + " mais pesado";
                break;
            }
        }
        return retorno;
    }
 }

Example of Use:

    public static void main(String[] args) {
        Pessoa p = new Pessoa();
        Pessoa p2 = new Pessoa();

        p.setNome(JOptionPane.showInputDialog("Entre com seu nome"));
        p.setAltura(Double.parseDouble(
        JOptionPane.showInputDialog("Entre com sua altura")));
        p.setPeso(Double.parseDouble(
        JOptionPane.showInputDialog("Entre com seu peso")));
        JOptionPane.showMessageDialog(null,"" + p.getNome() + " seu IMC = " + p.calculaIMC());
        JOptionPane.showMessageDialog(null,
        "Isto significa que voce estah " + p.avaliaIMC());

        p2.setNome(JOptionPane.showInputDialog("Entre com seu nome"));
        p2.setAltura(Double.parseDouble(
        JOptionPane.showInputDialog("Entre com sua altura")));
        p2.setPeso(Double.parseDouble(
        JOptionPane.showInputDialog("Entre com seu peso")));
        JOptionPane.showMessageDialog(null,"" + p2.getNome() + " seu IMC = " + p2.calculaIMC());
        JOptionPane.showMessageDialog(null,
        "Isto significa que voce estah " + p2.avaliaIMC());

        JOptionPane.showMessageDialog(null, p.comparaIMCMensagem(p2));
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.