I keep on messing up the math calculations :@.
Error
The output was shown as this"
BMR: 40.35 pounds
BMI: -83.60 inches
TDEE: -114.95 years
Your BMI classifies you as Obese
But it should be this way:
BMR is 2308.15
BMI is 40.35
TDEE is 3173.71
Your BMI classifies you as Obese
Can people help me with math part?
Functional class
import java.lang.Math;
public class Healthy
{
//Instance variables
private String name;
private char gender;
private double weightNum;
private double heightNum;
private double weightMetricNum;
private double heightMetricNum;
private int ageNum;
private double finalBMR;
private double finalBMI;
private double finalTDEE;
private final double CENTIMETER_CONVERSION = 2.54;
private final double KILOGRAM_CONVERSION = 0.45359237;
/**
* Creating a constructor that has
* the default variables
*/
public Healthy()
{
name = "";
weightNum = 0.0;
heightNum = 0.0;
ageNum = 0;
}
/**
* Creating a constructor that has
* the assigned variables
*/
public Healthy(String id, char status, double weight, double height, int year)
{
name = id;
gender = status;
weightNum = weight;
heightNum = height;
ageNum = year;
}
/**
* Convert the weight into kilograms
* based on the Metric System.
*/
private void setWeight()
{
weightMetricNum = KILOGRAM_CONVERSION * weightNum;
}
/**
* Convert the height into centimeters
* based on the Metric System.
*/
private void setHeight()
{
heightMetricNum = CENTIMETER_CONVERSION * heightNum;
}
/**
* Calculate the TDEE by user's level and BMR..
* @return the TDEE
*/
public double getTDEE(int level)
{
switch (level)
{
case 1:
finalTDEE = finalBMR * 1.2;
break;
case 2:
finalTDEE = finalBMR * 1.375;
break;
case 3:
finalTDEE = finalBMR * 1.55;
break;
case 4:
finalTDEE = finalBMR * 1.725;
break;
case 5:
finalTDEE = finalBMR * 1.9;
break;
}
return finalTDEE;
}
/**
* Calculate the BMI by using the weight and height.
* @return the BMI
*/
public double getBMI(double weight, double height)
{
finalBMI = (weight / (height * height))* 703;
return finalBMI;
}
/**
* Calculate the BMR by Harris-Benedict formula
* based on total body weight and the Metric system
* @return the BMR
*/
public double getBMR(char gender)
{
if(gender == 'M')
{
finalBMR = 66 + (13.7 * weightMetricNum) + (5 * heightMetricNum) - (6.8 * ageNum);
if(gender == 'F')
{
finalBMR = 655 + (9.6 * weightMetricNum) + (1.8 * heightMetricNum) - (4.7 * ageNum);
}
}
return finalBMR;
}
/**
* Gets the metric weight.
* @return the metric weight
*/
public double getMetricWeight()
{
setWeight();
return weightMetricNum;
}
/**
* Gets the metric height.
* @return the metric height
*/
public double getMetricHeight()
{
setHeight();
return heightMetricNum;
}
/**
* Gets the weight.
* @return the weight
*/
public double getWeight()
{
return weightNum;
}
/**
* Gets the height.
* @return the height
*/
public double getHeight()
{
return heightNum;
}
/**
* Gets the age.
* @return the age
*/
public int getAge()
{
return ageNum;
}
}
Tester Class
import java.util.Scanner;
/*
* Description: A class to test the Healthy class
*/
public class HowHealthy
{
public static void main(String args[])
{
//Initializes the variables.
String name;
double weightNum;
double heightNum;
String weightStatus;
int ageNum;
char genderStatus;
String gender;
int levelNum;
//Creating a Health object
Healthy healthObj = new Healthy();
Scanner scan = new Scanner(System.in);
System.out.print("Person's name: ");
String nameTemp = scan.nextLine(); /* Ask the user's name and set the
input to the name variable */
/*Validate the name input */
if (nameTemp.length() >= 1)
{
name = nameTemp;
} //if
else
{
System.out.println("Invalid name - must be a proper name");
System.exit(0);
} //else
System.out.print(nameTemp + ", are you male or female (M/F): ");
char genderTempStatus = scan.nextLine().toUpperCase().charAt(0); /* Ask the user's gender and set the
input to the genderStatus variable */
/*Validate the gender input */
if ((genderTempStatus == 'M') || (genderTempStatus == 'F'))
{
genderStatus = genderTempStatus;
} //if
else
{
System.out.println("Invalid gender - must be either M or F");
System.exit(0);
} //else
System.out.print(nameTemp + ", weight (pounds): ");
int weightTempNum = scan.nextInt(); /* Ask the user's weight and set the
input to the weightNum variable */
/*Validate the weight input */
if (weightTempNum >= 100)
{
weightNum = weightTempNum;
} //if
else
{
System.out.println("Invalid weight - must be at least 100 pounds");
System.exit(0);
} //else
System.out.print(nameTemp + ", height (inches): ");
double heightTempNum = scan.nextDouble(); /* Ask the user's height and set the
input to the heightNum variable */
/*Validate the height input */
if ((heightTempNum >= 60) && (heightTempNum <= 84))
{
heightNum = heightTempNum;
} //if
else
{
System.out.println("Invalid height - must be between 60 to 84");
System.exit(0);
} //else
System.out.print(nameTemp + ", age (years): ");
int ageTempNum = scan.nextInt(); /* Ask the user's age and set the
input to the ageNum variable */
/*Validate the age input */
if (ageTempNum >= 18)
{
ageNum = ageTempNum;
} //if
else
{
System.out.println("Invalid age - must be at least 18 years");
System.exit(0);
} //else
//Creating another Health object
Healthy healthObj1 = new Healthy(name, genderStatus, weightNum, heightNum, ageNum);
System.out.println("\nActivity Level: Use this categories: ");
System.out.println("\t1 - Sedentary (little or no exercise, desk job)");
System.out.println("\t2 - Lightly active (little exercise / sports 3-5 days/wk");
System.out.println("\t3 - Moderately active(moderate exercise / sports 3-5 days/wk)");
System.out.println("\t4 - Very active (hard exercise / sports 6 -7 day/wk)");
System.out.println("\t5 - Extra active (hard daily exercise / sports physical \n\t job or 2X day training i.e marathon, contest, etc.)");
System.out.print("\n\nHow active are you? ");
int levelTempNum = scan.nextInt();
/*Validate the level input */
if ((levelTempNum >= 1) && (levelTempNum <= 5))
{
levelNum = levelTempNum;
} //if
else
{
System.out.println("Invalid leve - must between 1 to 5");
System.exit(0);
} //else
System.out.printf("\n\n%s's information\n", name);
System.out.printf("Weight: %.1f pounds \n", healthObj1.getWeight());
System.out.printf("Height: %.1f inches \n", healthObj1.getHeight());
System.out.printf("Age: %d years \n", healthObj1.getAge());
/*Give the proper syntax for gender */
if (genderStatus == 'M')
{
gender = "Male";
if(genderStatus =='F')
{
gender = "Female";
}
}
System.out.print("These are for a " + gender + ".\n\n");
System.out.printf("BMR: %.2f pounds\n", healthObj1.getBMI(weightNum, heightNum)); //Pass the weight and height
System.out.printf("BMI: %.2f inches\n", healthObj1.getBMR(genderStatus)); //Pass the gender
System.out.printf("TDEE: %.2f years\n", healthObj1.getTDEE(levelNum)); // Pass the level
/*Give the overall status of the weight */
if ((healthObj1.getBMI(weightNum, heightNum)< 18.5))
{
weightStatus = "Underweight";
}
else if((healthObj1.getBMI(weightNum, heightNum)>= 18.5) && (healthObj1.getBMI(weightNum, heightNum)< 25))
{
weightStatus = "Normal weight";
}
else if((healthObj1.getBMI(weightNum, heightNum)>= 25) && (healthObj1.getBMI(weightNum, heightNum)< 30))
{
weightStatus = "Overweight";
}
else if((healthObj1.getBMI(weightNum, heightNum)>= 30))
{
weightStatus = "Obese";
}
System.out.println("Your BMI classifies you as " + weightStatus);
}//main
}//class