Skip to content
Auf dieser Seite

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

BMIKategorie
< 18.5Untergewichtig
18.5 - 25Normalgewichtig
25 - 30Übergewichtig
> 30Schweres Ü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;
    }

}

85296 Rohrbach | Hofmarkstraße 24 | Handelsregister: HRB 9299 | Registergericht: Amtsgericht Ingolstadt | Umsatzsteuer-Identifikationsnummer: DE328161891 | Vertreten: Markus Keck