## The challenge

`BMI` stands for Body Mass Index and is a value derived from the mass and height of a person. The BMI is defined as `the body mass divided by the square of the body height`, and is universally expressed in units of kg/m², resulting from mass in kilograms and height in metres. Wikipedia

Write function BMI that calculates body mass index (bmi = weight / height ^ 2).

if bmi <= 18.5 return “Underweight”

if bmi <= 25.0 return “Normal”

if bmi <= 30.0 return “Overweight”

if bmi > 30 return “Obese”

## Test cases

 `````` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 `````` ``````import org.junit.Test; import static org.junit.Assert.assertEquals; import org.junit.runners.JUnit4; public class SolutionTest { @Test public void testBMI() { assertEquals("Underweight", Calculate.bmi(50, 1.80)); assertEquals("Normal", Calculate.bmi(80, 1.80)); assertEquals("Overweight", Calculate.bmi(90, 1.80)); assertEquals("Obese", Calculate.bmi(100, 1.80)); } @Test public void testRandom() { System.out.println("100 Random tests"); java.util.Random r = new java.util.Random(); for(int i = 0; i < 99; i++) { double randomW = 40+r.nextDouble()*80; double randomH = r.nextDouble()+0.50*2.23; assertEquals(this.b(randomW, randomH), Calculate.bmi(randomW, randomH)); } } private static String b(double w, double h) { double bmi = w/(h*h); return bmi>30.0 ? "Obese" : bmi<=30.0 && bmi>25.0 ? "Overweight" : bmi<=18.5 ? "Underweight" : "Normal"; } } ``````

## The solution in Java

Option 1:

 `````` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 `````` ``````import java.lang.*; public class Calculate { public static String bmi(double weight, double height) { // Use `Math.pow` to get the power of the height double bmi = weight / Math.pow(height, 2); if (bmi<=18.5) return "Underweight"; if (bmi<=25.0) return "Normal"; if (bmi<=30.0) return "Overweight"; if (bmi>30) return "Obese"; // We should never get here.. return ""; } } ``````

Option 2:

 ``````1 2 3 4 5 6 `````` ``````public class Calculate { public static String bmi(double weight, double height) { double bmi = weight/(height*height); return bmi <= 18.5 ? "Underweight": bmi <=25.0 ? "Normal" : bmi<=30.0 ? "Overweight" : "Obese"; } } ``````