Calcular IMC

Olá! Estou fazendo o seguinte exercício:

" Criar uma classe Pessoa com os seguintes atributos: Nome, peso, altura.

A classe pessoa deverá ter um método para calcular o IMC – Índice de
massa corporal da pessoa. O índice é obtido pela formula =
peso/altura*altura;

Deverá também ter um método que retorne a classificação do IMC
conforme descrito a seguir:

Se IMC <=19 categoria será “ABAIXO DO PESO”

Se IMC <=25 categoria será “PESO IDEAL”

Se IMC <=30 categoria será “ACIMA DO PESO”

Se IMC <=35 categoria será “OBESIDADE LEVE” OU

ACIMA DE 35 categoria será “OBESIDADE” "

No entanto, encontro certa dificuldade em chamar o método na classe principal, gostaria de ajuda!

O código da Classe pessoa:

public class Pessoa {
String nome;
float peso;
float altura;
float oper = (peso/altura*altura);

public void calcular {
if (oper<=19) {
System.out.println(“ABAIXO DO PESO”);
}
else if (oper<=25) {
System.out.println(“PESO IDEAL”);
}
else if (oper<=30) {
System.out.println(“ACIMA DO PESO”);
}
else if (oper<=35) {
System.out.println(“OBESIDADE LEVE”);
}
else if (oper>35) {
System.out.println(“OBESIDADE”);
}
else {
System.out.println(“Inválido”);
}
}
}

O código da classe principal:
public static void main(String[] args) {
Pessoa c1 = new Pessoa();
c1.nome;
c1.altura;
c1.peso;

Scanner sc = new Scanner(System.in);

System.out.println("Qual seu nome? "+c1.nome);
System.out.println("Qual sua altura? "+c1.altura);
System.out.println("Qual seu peso? "+c1.peso);
}

}

1 - Se calcular é um método, então a sintaxe correta (na declaração) seria:

public void calcular(){
	[...]
}

e na chamada: c1.calcular();

2 - Onde está a declaração da classe principal? Só tem o método main aí…

3 - O que significa isso:

float oper = (peso/altura*altura);?
Uma variável recebe uma operação (ou o valor dela) sem estar em um método? Pode isso?

  • objetos têm características que, no Java são representados por atributos;
  • objetos têm comportamento (fazem alguma coisa) que no Java são representados por métodos. Logo, atributos, via de regra recebem valores por meio de métodos. A IDE não informou sobre o erro quanto a declaração/inicialização dessa variável?

4 - Mesmo que a classe Pessoa e a classe Principal estejam no mesmo pacote (pasta) é um dos pilares da POO o encapsulamento dos dados. Logo, seria mais prudente definir a visibilidade dos atributos para privado (private) e declarar métodos modificadores e acessores para configurar e recuperar as informações, respectivamente.

Exemplo:

public class Pessoa {

    public String nome;
    public float peso;
    public float altura;

    public String calcularIMC() {
        float imc = (peso / altura * altura);
        if (imc <= 19) {
            return "ABAIXO DO PESO";
        }
        if (imc <= 25) {
            return "PESO IDEAL";
        }
        if (imc <= 30) {
            return "ACIMA DO PESO";
        }
        if (imc <= 35) {
            return "OBESIDADE LEVE";
        }
        if (imc > 35) {
            return "OBESIDADE";
        }
        return "Inválido";
    }
}

Programa:

import java.io.PrintStream;
import java.util.Scanner;

public class Programa {

    public static void main(String[] args) {
        try {
            Programa programa = new Programa();
            programa.executar();
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    private static final Scanner entrada = new Scanner(System.in);
    private static final PrintStream saida = System.out;

    public void executar() throws Exception {

        Pessoa pessoa1 = new Pessoa();

        saida.println("Qual seu nome? ");
        pessoa1.nome = entrada.nextLine();

        saida.println("Qual sua altura? ");
        pessoa1.altura = Float.parseFloat(entrada.nextLine());

        saida.println("Qual seu peso? ");
        pessoa1.peso = Float.parseFloat(entrada.nextLine());

        saida.println("IMC");
        saida.println("Nome:      " + pessoa1.nome);
        saida.println("Altura:    " + pessoa1.altura);
        saida.println("Peso:      " + pessoa1.peso);
        saida.println("Resultado: " + pessoa1.calcularIMC());
    }
}