```
import java.util.Scanner;
class BMICalculator {
public static double calculateBMI(double weight, double tall) {
double bmi = weight / (tall*tall);
// 해당 메소드를 구현하세요.
//저체중(18.5미만), 정상(18.5이상 ~ 25미만), 과체중(25이상~30미만), 비만(30이상)
return bmi;
}
public static void printBMIClassification(double bmi) {
if (bmi<18.5) {
System.out.println("저체중");
}
else if (bmi<25) {
System.out.println("정상");
}
else if (bmi<30) {
System.out.println("체중");
}
else {
System.out.println("비만");
}
}
public static void main(String[] args) {
System.out.println("몸무게(kg)와 키(m)를 입력하세요.");
Scanner input = new Scanner(System.in);
double weight = input.nextDouble();
double tall = input.nextDouble();
// BMI 지수 계산
double bmi = calculateBMI(weight, tall);
// BMI 지수를 입력하여 비만도 결과 출력
printBMIClassification(bmi);
}
}
```
두가지 질문이 있습니다.
첫째, 조건문에서 18.5<=bmi<25 이렇게 하려고 먼저 시도를 했으나 빨간줄이 나오더라구요. 그래서 else if 로 바꿨던 건데 왜 <= 이 기호를 사용했을 때 빨간줄이 나왔던 것인지 궁금합니다.
두번째, bmi를 출력하고 싶은데 어떻게 해야하나요? 단순히 calculateBMI(bmi)로 하기에는 파라메터 모양과 일치하지 않아서 출력이 안되는 것 같구요 어떻게 해야 bmi값도 출력이 되는지 궁금해요!
감사드립니다~
sehongpark님의 답변
# 비교연산자와 메소드의 역할 구분
## 비교 연산자와 논리연산자의 활용
비교연산자는 이항연산자 즉, 한번에 두 개 까지만 비교가 가능합니다. 따라서 `18.5 <= bmi < 25`와 같은 조건식은 사용 할 수 없습니다. 이런 경우 논리 연산자를 통해 비교식을 확장 할 수 있습니다.
```
if (bmi >= 18.5 && bmi < 25) { ... }
```
## bmi 결과값 출력
`printBMIClassification(bmi)` 메소드에서 비만도와 함께 bmi 값을 출력하시면 되겠습니다. 메소드는 한번에 한가지 일만을 집중 할 수록 좋습니다. 따라서 계산 메소드에서 출력하기보다, 출력 메소드에서 같이 처리하는게 좋습니다.
```
public static void printBMIClassification(double bmi) {
String classification = "";
if (bmi <18.5) {
classification = "저체중";
} else if (bmi < 25) {
classification = "정상";
} else if (bmi < 30) {
classification = "과체중";
} else {
classification = "비만";
}
System.out.printf("%s - %.2f\n", classification, bmi);
}
```
mj0042님의 답변
덕분에 의문이 해결됐어요!감사드립니다!