Я только начал изучать 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? а также, почему не отображается категория?
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);
Ошибка 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: двойной ИМТ = вес в кг / (ростМЕТРЫ * ростМЕТРЫ);
Вы пытаетесь разделить вес в кг на ноль, см. встроенные комментарии ниже
**
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
Недопустимые значения роста или веса, рост и вес должны иметь положительные значения, отличные от нуля.
Похожие вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].