# 다이어트(BMI 지수) #### CODE <a class='btn btn-default' href='/codes/24927'>Link</a> ``` public class Diet { public static void main(String[] args) { // 변수 생성 double w = 81.6; double t = 1.76; // BMI 계산 double bmi = calculate(w, t); // 결과 출력 System.out.printf("BMI: %.2f(%.1fkg, %.2fm)\n", bmi, w, t); System.out.printf("결과: %s입니다.\n", result(bmi)); } // 몸무게와 키를 입력받아, bmi 지수를 반환 public static double calculate(double weight, double tall) { /* 해당 메소드를 완성하시오. */ return weight / (tall * tall); } // bmi 지수를 입력받아, 비만 결과를 반환 public static String result(double bmi) { String result = ""; /* 해당 메소드를 완성하시오. */ if (bmi >= 30) { result = "비만"; } else if (25 <= bmi < 30) { result = "과체중"; } else if (18.5 <= bmi < 25) { result = "정상"; } else { result = "저체중"; } return result; } } ``` #### INPUT ``` ``` #### OUPUT ``` /root/var/tmp/2020_05_15_05_26_13_66347dca/Diet.java:27: error: bad operand types for binary operator '<' } else if (25 <= bmi < 30) { ^ first type: boolean second type: int /root/var/tmp/2020_05_15_05_26_13_66347dca/Diet.java:29: error: bad operand types for binary operator '<' } else if (18.5 <= bmi < 25) { ^ first type: boolean second type: int 2 errors ``` bad operand types for binary operator -> 무슨 뜻인가요?
# 비교 연산자와 그 대상 아래 에러내용은, 비교연산자 '<' 에 사용된 피연산자. 즉, 비교 대상 값이 이상하다는 에러입니다. ``` bad operand types for binary operator '<' ``` ## 해결 방법 논리 연산자를 사용하여 문제를 해결해보세요. ``` ... } else if (25 <= bmi && bmi < 30) { // 25 이상이면서, 동시에 30보다는 작은 bmi인 경우! ... ``` ## 에러 원인 연산자의 우선순위가 같은 경우, 좌측에서부터 연산 됩니다. 아래 코드 연산을 분석해보면 다음과 같습니다. ``` // bmi는 28이라 가정! 진행 1: (25 <= bmi < 30) 진행 2: (true < 30) 진행 3: (????????) // 에러 발생! boolean 값과 30을 비교할 수 없음! ``` ## PS. 질문 감사합니다!