Я только начал изучать Java и пытаюсь создать простой калькулятор ИМТ, используя концепцию ООП.

Вот мои коды:

import java.util.Scanner;

class BIM 
{
    int weight;
    double weightKG = weight * 0.45359237;
    int height;
    double heightMETERS = height * 0.0254;
    double BMI = weightKG / (heightMETERS * heightMETERS);
    public void calculateBMI()
    {    
        System.out.print("The BMI is: " + BMI);
    }
}

public class BMI 
{
    public static void main(String args[] ) throws Exception 
    {
        Scanner input = new Scanner(System.in);
        
        System.out.print("Enter weight in pounds: ");
        int weight = input.nextInt();
        
        System.out.print("Enter height in inches: ");
        int height = input.nextInt();
        
        BIM b = new BIM();
        b.calculateBMI(); 
    }
    
    private static void bmiCategory (double BMI)
    {
    
        if (BMI < 18.5)
        {
            System.out.println("Underweight");
        }
        else if (BMI < 25.0)
        {
            System.out.println("Normal");
        }
        else if (BMI < 30.0)
        {
            System.out.println("Overweight");
        }
        else
        {
            System.out.println("Obese");
        }            
    }
}

Вывод моих кодов:

Введите вес в фунтах: 100 Введите рост в дюймах: 50 ИМТ: NaN

Почему я получаю на выходе NaN? а также, почему не отображается категория?

-2
Bella Swan 16 Янв 2021 в 18:46

3 ответа

Лучший ответ

Ваш класс BIM выполняет всю математику, но вы никогда не передаете ему height или weight (и вы делаете математику, прежде чем назначать эти значения где-либо). Сначала исправьте BIM. Что-то вроде,

class BIM {
    public BIM(int weight, int height) {
        this.weight = weight;
        this.height = height;
        this.weightKG = weight * 0.45359237;
        this.heightMETERS = height * 0.0254;
        this.BMI = weightKG / (heightMETERS * heightMETERS);
    }

    int weight;
    double weightKG;
    int height;
    double heightMETERS;
    double BMI;

    public void calculateBMI() {
        System.out.print("The BMI is: " + BMI);
    }
}

Тогда вместо

BIM b = new BIM();

Тебе нужно

BIM b = new BIM(weight, height);
2
Elliott Frisch 16 Янв 2021 в 16:00

Ошибка 1
Вы не установили значения атрибутов weight и height для объекта класса BMI . Вам необходимо добавить следующий код в свой класс ИМТ :

BMI(int weight, int height){
   this.weight = weight;
   this.height = height;
}

А затем создайте объект класса BMI как

BMI b = new BMI(weight, height)

Ошибка 2
Вы нигде не вызывали функцию bmiCategory, поэтому категория не отображается.

1
Sumit Singh 16 Янв 2021 в 16:00

Задача 1: двойной ИМТ = вес в кг / (ростМЕТРЫ * ростМЕТРЫ);

Вы пытаетесь разделить вес в кг на ноль, см. встроенные комментарии ниже

**

import java.util.Scanner;
class BIM 
{
    int weight;
    double weightKG = weight * 0.45359237;
    int height;  // Here value of height is 0 as you are not assigning the value .
    
    double heightMETERS = height * 0.0254; // anything multiplied with 0 height is 0 , heightMETERS value will be 0 
    // The below statement divides weightKG by zero which is infinite and it is not a number 
    double BMI = weightKG / (heightMETERS * heightMETERS); 
    
    public void calculateBMI()
    {    
        System.out.print("The BMI is: " + BMI); // you will sendup printing NaN
    }
}

**

Проблема 2: вы никогда не вызываете метод bmi Category для печати категории на основе BMI.

Если бы мне пришлось переформатировать и переставить этот код, я бы сделал это. Мы все еще можем улучшить это с помощью обработки исключений, но, по крайней мере, мы можем это сделать.

**

import java.util.Scanner;
class Bmi {

  public double calculateBMI(double weight, double height) {

    double weightKG = weight * 0.45359237;
    double heightMETERS = height * 0.0254;
    double bmi = weightKG / (heightMETERS * heightMETERS);

    return bmi;
  }

  public String bmiCategory(double bmi) {

    if (bmi < 18.5) {
      return "Underweight";
    }

    if (bmi < 25.0) {
      return "Normal";
    }

    if (bmi < 30.0) {
      return "Overweight";
    }

    return "Obese";

  }


}

public class BmiCalculator {

  public static void main(String args[]) {

    Scanner input = new Scanner(System.in);

    System.out.print("Enter weight in pounds: ");
    double weight = input.nextDouble();

    System.out.print("Enter height in inches: ");
    double height = input.nextDouble();

    //validate inputs
    if(height <=0 || weight <=0) {
      System.out.println("The invalid height or weight, "
          + "height and weight should be a positive non zero inputs");
      return;
    }

    Bmi b = new Bmi();
    double bmi = b.calculateBMI(weight, height);
    String category = b.bmiCategory(bmi);
    System.out.println("You belong to "+category+ " category");

  }


}

**

Выход:

Введите вес в фунтах: 100

Введите высоту в дюймах: 6

Вы относитесь к категории страдающих ожирением

Введите вес в фунтах: 0

Введите высоту в дюймах: 6

Недопустимые значения роста или веса, рост и вес должны иметь положительные значения, отличные от нуля.

0
user3079149 16 Янв 2021 в 16:32
65751450