Dúvida sobre Atributos e Erro

9 respostas Resolvido
V

Sou iniciante no mundo da programação, e comecei na semana passada um curso básico de Java. Hoje recebi a tarefa deste curso e estou com algumas dúvidas, poderiam me auxiliar nas mesmas???

Minhas dúvidas são:

  1. Não consigo entender qual o erro que o sistema me aponta quando rodo. Entendo que ele me solicita que eu feche o scanner mas como faço essa atividade?

  2. Quando crio outra classe com o nome de Principal para apontar os dados de cada um, não estou conseguindo puxar os atributos (Peso, Altura, IMC) para dar valores à cada objeto desta nova classe. Sabe me dizer porque?

Minha tarefa é a seguinte:

Instruções

Implemente no Eclipse uma classe chamada Paciente que possui um construtor que recebe o seu peso em quilos e sua altura em metros, ambos utilizando o tipo double.

Crie um método chamado calcularIMC() que calcula o índice de Massa Corporal de acordo com a fórmula IMC = peso (quilos) / (altura * altura (metros)).

Crie também um método chamado diagnostico() que utiliza o método calcularIMC() e retorna uma String de acordo com as seguintes faixas de valor:

Baixo peso muito grave = IMC abaixo de 16 kg/m²
Baixo peso grave = IMC entre 16 e 16,99 kg/m²
Baixo peso = IMC entre 17 e 18,49 kg/m²
Peso normal = IMC entre 18,50 e 24,99 kg/m²
Sobrepeso = IMC entre 25 e 29,99 kg/m²
Obesidade grau I = IMC entre 30 e 34,99 kg/m²
Obesidade grau II = IMC entre 35 e 39,99 kg/m²
Obesidade grau III (obesidade mórbida) = IMC igual ou maior que 40 kg/m²

Implemente no Eclipse uma classe chamada Principal em que se criam 3 instâncias da classe Paciente com valores diferentes e se imprime no console o resultado dos dois métodos criados.

Meu Programa é o Seguinte:

package Obesidade;

import java.util.Scanner;

public class Paciente {

	public static void main (String[] args){
		Scanner ler = new Scanner(System.in);

		double peso, altura, imc;
	
		
		System.out.println("Informe o peso (em kgs):\n");
		peso = ler.nextDouble();
		
		System.out.println("\nInforme a altura (em metros):\n");
		altura = ler.nextDouble();
		ler.close();
		
		imc = peso / (altura*altura);
		
		   System.out.printf("\nIMC = %.2f", imc);
		   if (imc < 16)
			   System.out.println(" Baixo Peso Muito Grave.");
		   if ((imc >= 16) && (imc < 16.99))
		       System.out.println(" Baixo Peso Grave.");
		   if ((imc >= 17) && (imc < 18.49))
		       System.out.println(" Baixo Peso.");
		   if ((imc >= 18.50) && (imc < 24.99))
		       System.out.println(" Peso Normal.");
		   if ((imc >= 25) && (imc < 29.99))
		       System.out.println(" Sobrepeso.");
		   if ((imc >= 30) && (imc < 34.99))
		       System.out.println(" Obesidade Grau I.");
		   if ((imc >= 35) && (imc < 39.99))
		       System.out.println(" Obesidade Grau II.");
		   if ((imc >= 40))
			   System.out.println(" Obesidade Grau III. (Obesidade Mórbida)");
	}
}

?

9 Respostas

R

Bom, eu acho que resolvi seu problema!
Eu não sei muito sobre ciências mas acho que seu problema é nessa linha de código:

imc = peso / (altura * altura);

O correto seria:

imc = peso / altura * altura;
Dragoon
Solucao aceita

O grande problemas dos iniciantes é não seguir a risca o que é pedido no programa, primeiramente, leia, releia, leia novamente, e entenda que criar uma classe Paciente com um construtor Peso e Altura, com os dois métodos calcularIMC() e diagnostico() seria:

package Classes;
public class Paciente {
    private final Double altura;
    private final Double peso;

    public Paciente(Double altura, Double peso) {
        this.altura = altura;
        this.peso = peso;
    }
    
    public Double getAltura() {
        return altura;
    }

    public Double getPeso() {
        return peso;
    }
    
    public Double calcularIMC()
    {
        return (peso / (altura * altura));
    }
    
    public String diagnostico()
    {
        double imc = this.calcularIMC();
        String result = "";
        if (imc < 16)
            result = " Baixo Peso Muito Grave.";
        if ((imc >= 16) && (imc < 16.99))
            result = " Baixo Peso Grave.";
        if ((imc >= 17) && (imc < 18.49))
            result = " Baixo Peso.";
        if ((imc >= 18.50) && (imc < 24.99))
            result = " Peso Normal.";
        if ((imc >= 25) && (imc < 29.99))
            result = " Sobrepeso.";
        if ((imc >= 30) && (imc < 34.99))
            result = " Obesidade Grau I.";
        if ((imc >= 35) && (imc < 39.99))
            result = " Obesidade Grau II.";
        if ((imc >= 40))
            result = " Obesidade Grau III. (Obesidade Mórbida)";
        
        return result;
    }
}

Depois disso você crie uma classe para que chame 3 instâncias da classe paciente:

import Classes.Paciente;
import java.io.FileNotFoundException;
import java.io.IOException;

public class JavaApplication1 {
    
    public static void main(String[] args) throws FileNotFoundException, IOException {
        
        Paciente pac1 = new Paciente(1.60, 80.0);
        Paciente pac2 = new Paciente(1.60, 70.0);        
        Paciente pac3 = new Paciente(1.80, 82.1);
        
        
        System.out.println("Paciente 1: IMC: " + pac1.calcularIMC() + " Diagnóstico: " + pac1.diagnostico());
        System.out.println("Paciente 2: IMC: " + pac1.calcularIMC() + " Diagnóstico: " + pac2.diagnostico());
        System.out.println("Paciente 3: IMC: " + pac1.calcularIMC() + " Diagnóstico: " + pac3.diagnostico());
        
    }
}
V

Bom dia Dragoon!

Primeiramente muito obrigado pelo teu auxílio. Foi de muita ajuda, mas gostaria que me ajuda-se se possível em algumas outras dúvidas que surgiram!!!

1 - Rodei o programa e existe alguma coisa com erro nele, pois todos estão retornando o mesmo resultado para o cálculo do IMC, 2,5E-4. Logo, o diagnóstico fica Baixo Peso Muito Grave. Sabes me informar onde esta o problema???

Além disso, fiquei com dúvidas sobre os comandos que usaste. Em relação às importações que fizeste, qual a função delas??? No que elas influenciam no meu programa???

import java.io.FileNotFoundException;

import java.io.IOException;

Muito obirgado!!!

V

Raylan7, obrigado pelo auxílio mas infelizmente não era este o problema do meu código.

V

Dragoon,

Obrigado mas encontrei o meu erro. Ao transcrever para o eclipse o exemplo que me deu acabei invertendo a ordem de peso/altura, com isso acabava gerando um valor impossível.

Além disso, no seu código notei que no final da classe JavaApplication1 acabou não notando e deixou para o código calcular sempre o IMC do mesmo paciente.

De qualquer forma muito obrigado novamente, me ajudou muito!!!

V

Mas minha dúvida abaixo segue:

Em relação às importações que fizeste, qual a função delas??? No que elas influenciam no meu programa?

import java.io.FileNotFoundException;
import java.io.IOException;

Notei que eu apaguei do meu código estas e o código continua funcionando normalmente.

Além disso, sabe me informa qual o comando devo dar para que a resposta me retorne apenas 2 casas decimais???

Dragoon

Ok! Isso foi bom de você próprio encontrar o erro!

Dragoon

Seguinte!

As importação se não forem exigidas você pode remover! Isso é bom pois mantem seu programa mais limpo e o seu desempenho melhora.

Sobre a formatação de casas decimais:

String.format("%.2f", pac1.calcularIMC())

Ou seja,

System.out.println("Paciente 1: IMC: " + String.format("%.2f", pac1.calcularIMC()) + " Diagnóstico: " + pac1.diagnostico());

Resumindo:

Class Formatter

String resultado = String.format("%.2f", valor);

ou também

Class DecimalFormat

double numero = 100.0915;
DecimalFormat formato = new DecimalFormat("#.##");      
numero = Double.valueOf(formato.format(numero));

Utilize sempre o site de referencia do Java

V

Nossa Dragoon, perfeito cara. Não sei nem como agradecer.

Sou iniciante total e to ainda muito perdido em relação à programação, sua ajuda foi de total importância!!!

Abraço!

Criado 21 de julho de 2016
Ultima resposta 25 de jul. de 2016
Respostas 9
Participantes 3