Body Mass Index Calculator
Category: Java
Time: 10 min
Difficulty: Easy
Aufgabenstellung
- Testing
Entwickle einen Test der alle BMI-Kategorien positiv testet
- Anwendung
Ein Programm soll von der Kommandozeile eine ganzzahlige Zahl für die Körpergröße (in cm) und eine ganzzahlige Zahl das für das Körpergewicht (in kg) einlesen und den Body-Mass-Index berechnen. Das Programm soll anschließend den Body-Mass-Index und die Kategorisierung auf der Kommandozeile ausgeben
Body-Mass-Index Kategorien
| BMI | Kategorie |
|---|---|
< 18.5 | Untergewichtig |
18.5 - 25 | Normalgewichtig |
25 - 30 | Übergewichtig |
> 30 | Schweres Übergewicht |
Implementierung
java
public class BodyMassIndexCalculator {
public enum BMIClassification {
UNDERWEIGHT, NORMALWEIGHT, OVERWEIGHT, HEAVY_OVERWEIGHT
}
/**
* Method to calculate the Body Mass Index.0
* Formula: weight (kg) / (height (meters) * height (meters))
*
* @param heightInCentimeters - height in centimeters
* @param weightInKilograms - weight in kilograms
* @return Body Mass Index
*/
public static double calculateBmi(int heightInCentimeters, int weightInKilograms) {
return 0;
}
/**
* Classifies the provided bmi into the associated category
*
* @param bmi - bmi value to be classified
* @return Body Mass Index Category
*/
public static BMIClassification classifyBmi(double bmi) {
return null;
}
}java
class BodyMassIndexCalculatorTest {
@Test
public void calculateBmi() {
final double DELTA = 0.01;
final double bmi1 = BodyMassIndexCalculator.calculateBmi(170, 60);
final double bmi2 = BodyMassIndexCalculator.calculateBmi(180, 50);
final double bmi3 = BodyMassIndexCalculator.calculateBmi(120, 80);
final double bmi4 = BodyMassIndexCalculator.calculateBmi(150, 50);
assertEquals(20.8, bmi1, DELTA);
assertEquals(15.4, bmi2, DELTA);
assertEquals(55.6, bmi3, DELTA);
assertEquals(22.2, bmi4, DELTA);
}
@Test
public void shouldBeUnderweight() {
assertEquals(BodyMassIndexCalculator.BMIClassification.UNDERWEIGHT, BodyMassIndexCalculator.classifyBmi(15.0));
assertEquals(BodyMassIndexCalculator.BMIClassification.UNDERWEIGHT, BodyMassIndexCalculator.classifyBmi(18.4));
}
@Test
public void shouldBeNormalweight() {
assertEquals(BodyMassIndexCalculator.BMIClassification.NORMALWEIGHT, BodyMassIndexCalculator.classifyBmi(18.5));
assertEquals(BodyMassIndexCalculator.BMIClassification.NORMALWEIGHT, BodyMassIndexCalculator.classifyBmi(24.9));
}
@Test
public void shouldBeOverweight() {
assertEquals(BodyMassIndexCalculator.BMIClassification.OVERWEIGHT, BodyMassIndexCalculator.classifyBmi(25.0));
assertEquals(BodyMassIndexCalculator.BMIClassification.OVERWEIGHT, BodyMassIndexCalculator.classifyBmi(29.9));
}
@Test
public void shouldBeHeavyOverweight() {
assertEquals(BodyMassIndexCalculator.BMIClassification.HEAVY_OVERWEIGHT, BodyMassIndexCalculator.classifyBmi(30.0));
assertEquals(BodyMassIndexCalculator.BMIClassification.HEAVY_OVERWEIGHT, BodyMassIndexCalculator.classifyBmi(34.0));
}
}java
public class BodyMassIndexCalculator {
public enum BMIClassification {
UNDERWEIGHT, NORMALWEIGHT, OVERWEIGHT, HEAVY_OVERWEIGHT
}
private static final double UNDERWEIGHT_LOWER_BOUND = 18.5;
private static final double NORMALWEIGHT_LOWER_BOUND = 25.0;
private static final double OVERWEIGHT_LOWER_BOUND = 30.0;
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Geben Sie die Höhe in cm ein");
int heightInCentimeters = scan.nextInt();
System.out.println("Geben Sie das Gewicht in kg ein");
int weightInKilograms = scan.nextInt();
double bmi = calculateBmi(heightInCentimeters, weightInKilograms);
BMIClassification classification = classifyBmi(bmi);
System.out.println("Der BMI beträgt: " + bmi + ", Klassifizierung: " + classification);
}
/**
* Method to calculate the Body Mass Index.0
* Formula: weight (kg) / (height (meters) * height (meters))
*
* @param heightInCentimeters - height in centimeters
* @param weightInKilograms - weight in kilograms
* @return Body Mass Index
*/
public static double calculateBmi(int heightInCentimeters, int weightInKilograms) {
double height = (double) heightInCentimeters / 100;
return weightInKilograms / (height * height);
}
/**
* Classifies the provided bmi into the associated category
*
* @param bmi - bmi value to be classified
* @return Body Mass Index Category
*/
public static BMIClassification classifyBmi(double bmi) {
if(bmi < UNDERWEIGHT_LOWER_BOUND)
return BMIClassification.UNDERWEIGHT;
else if (bmi < NORMALWEIGHT_LOWER_BOUND)
return BMIClassification.NORMALWEIGHT;
else if (bmi < OVERWEIGHT_LOWER_BOUND)
return BMIClassification.OVERWEIGHT;
else
return BMIClassification.HEAVY_OVERWEIGHT;
}
}