IT/JAVA

CodeUp - 1228 : 비만도 측정 1

_KH_ 2025. 1. 1. 23:16

[문제]

희윤이는 '성문이 두마리 치킨' 가게를 운영하고 있다.

치킨집을 운영하다 보니 매일 치킨을 먹게 되었다.

그러던 어느 날 몸무게를 재어보니 80kg이 나가는 것을 보고 깜짝 놀랐다.

희윤이 여자친구는 비만인 사람을 제일 싫어 하므로 희윤이는 절대 비만이면 안 된다.

희윤이가 비만인지 아닌지 판별하는 프로그램을 작성하시오.

 

[조건]

 

[한글코딩]

		/* 스캐너로 입력을 받는다.
		 * 
		 * 키를 입력받을 변수 선언
		 * 키를 입력받음
		 * 정상적인 입력인지 유효성 검사 
		 * 
		 * 몸무게를 입력받을 변수 선언
		 * 몸무게를 입력받음
		 * 정상적인 입력인지 유효성 검사 
		 * 
		 * 표준 몸무게를 저장할 변수를 하나 선언한다.
		 * 표준 몸무게를 계산하는 식을 세운다.
		 * 
		 * 비만도를 계산할 변수를 하나 선언한다.
		 * 비만도를 계산하는 식을 세운다.
		 * 
		 * if(만약 비만도가 10 이하라면) {
		 * 		sout("정상입니다."); 
		 * } else (만약 비만도가 10 초과 20 이하라면) {
		 * 		sout ("과체중입니다.");	
		 * } else {
		 * 		sout("비만입니다."); 
		 *
		 *
		 * 정확한 입력을 받을 때까지 반복해야 하므로 while문
		 * 유효성 검사는 if문으로 작성하고 정확하지 않을 시 다시 입력하도록
		 * 정확한 정보를 입력하면 while문을 탈출하도록 함
		 * */

 

[코드 작성]

package codeup;

import java.util.Scanner;

public class CodeUp1228 {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);

		double height;
		double weight; 

		while(true) {
			System.out.println("키를 입력하세요");
			height = sc.nextDouble();

			if(height <= 100 && height >= 200) {
				System.out.println("올바른 정보를 다시 입력해주세요.");
				continue;
			}

			System.out.println("몸무게를 입력하세요");
			weight = sc.nextDouble(); // 수정

			if(weight <= 30.0 && weight >= 130.0) {
				System.out.println("올바른 정보를 다시 입력해주세요.");
				continue;
			}
			break;
		}

		double standard = (height - 100.0) * 0.9;
		double obesity = ((weight - standard) * 100.0) / standard;

		System.out.printf("비만도는 %.2f %%입니다.\n", obesity);

		if(obesity < 10.0) { 
			System.out.println("정상입니다.");
		} else if (obesity > 10.0 && obesity <= 20.0) {
			System.out.println("과체중입니다.");
		} else {
			System.out.println("비만입니다.");	
		}
	}
}

 

비만도 출력 시 println을 사용했더니 소숫점이 보기 싫어서 소숫점을 2자리까지만 출력하도록 printf와 문자열 포맷을 이용하였다.

 

[문자열 포맷] : 원하는 형식을 지정하여 출력

System.out.printf

- %f : 실수 출력

- %d : 정수 출력

- %s : 문자열 출력

 

오류

중간에 이런 오류가 떴었는데 실수로 실수를 정수 형식으로 받아서 오류가 난 것이었다. nextDouble()로 바꾸어서 문제 해결!

 

출력 결과는 다음과 같다.