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

0

Given the following algorithm in Java that computes the IMC:

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");

    }

    }

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

    
asked by anonymous 21.12.2017 / 08:19

2 answers

1

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

I can pass a list of people and get the highest BMI. This does not belong to a person class object, but may belong to the class, so I will 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 everyone involved. For example, you could change the end of your code to:

Pessoa aquelaMaiorImc = Pessoa.getPessoaMaiorIMC(p, p2);
JOptionPane.showMessageDialog(null, aquelaMaiorImc.nome + " eh mais obeso");
    
21.12.2017 / 10:27
0

Friend, 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 Usage:

    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));
}
    
21.12.2017 / 09:59