본문 바로가기

국비교육/국비교육 복습

Day03_condition_Test07 : else if가 포함된 조건문 (★)

(Q) KH 여행사는 '무조건 1명 1박에 10만원'이라는 슬로건으로 영업을 하고 있습니다.
추가로 여름 여행객을 유치하기 위해 다음과 같은 이벤트를 하기로 결정했습니다.
-여름(6,7,8월)에 여행가는 사람은 무조건 이용요금 25% 할인

 

다음 정보가 주어졌을 때 예상 경비를 계산하여 출력하도록 프로그래밍 하세요
1.인원수(명)
2.여행기간(월)
3.여행계획중인 달(1월~12월 사이)

 

package day03;

import java.lang.*;

public class Day03_condition_Test07 {
	
	public static void main(String[] args) {

		int pricePerPeopleSpan = 100000;
		int discount = 25;

		int people = 1, travelSpan = 1, travelMonth = 8;

		boolean discountTF = travelMonth == 6 || travelMonth == 8 || travelMonth == 8;

		int price;
		if(discountTF) {
			price = pricePerPeopleSpan * people * (100 - discount) / 100;
		}
		else {
			price = pricePerPeopleSpan * people;
		}

		System.out.println("예상 총 경비는 " + price + "원 입니다");

	}

}

 

1) if의 조건부에는 boolean의 변수만 써도 상관없다

- if(discountTF) {}에서 조건부는 'discountTF == true'를 의미한다

 

2) 할인율을 적용할 때 할인율의 100의 보수를 이용한다

 

3) if문 앞에 변수를 선언하면 각 조건마다 변수의 값을 설정할 수 있다

- ★ 출력에 대한 중복 코드를 제거할 수있다 (각 경우에 대해서 System.out을 쓸 필요가 없다)

int price;
if(discountTF) {
	price = pricePerPeopleSpan * people * (100 - discount) / 100;
}
else {
	price = pricePerPeopleSpan * people;
}

 

4) 6, 7, 8월은 3으로 나눌 때 몫이 2인 달이다 (★)

-  3, 4, 5월을 봄 / 6, 7, 8월을 여름 / 9, 10, 11월을 가을 / 12, 1, 2월을 겨울이라 할 때 이를 구분짓는 방법

- 나눗셈의 몫을 이용한다

if(month / 3 == 1) {
	System.out.println("봄");
}

else if(month / 3 == 2) {
	System.out.println("여름");
}

else if(month / 3 == 3) {
	System.out.println("가을");
}

else {
	System.out.println("겨울);
]

 

 

** 나눗셈 연산의 응용

- 나눗셈의 몫을 이용하는 연산

- 나눗셈의 나머지를 이용하는 연산 (모듈러 산술)

 

 

** 문제점

공학용 계산기로 무언가를 계산을 할 때 계산의 범위를 구분짓기 위해 위해 괄호를 엄청 넣었었다.

하지만 할인율을 적용할 때 다음과 같이 쓰면 0이 나왔던 이유?? 

int price;
if(discountTF) {
	price = pricePerPeopleSpan * people * ((100 - discount) / 100);
}
else {
	price = pricePerPeopleSpan * people;
}

- '(100 - discount) / 100'의 결과가 0이 나왔기 때문에 0이 나왔던 것 같다

 

 

i) price 변수를 double로 선언한 후 discount를 double로 형변환 시켜보니 올바른 출력이 나왔다

double price1 = (pricePerCountSpan * travelCount * travelSpan) * ((100 - (double)discount) / 100);

 

ii) price 변수를 double로 선언한 후 할인율에 대한 식 앞에 double로 형 변환을 시켜도 결과가 나왔다.

double price;
if(discountTF) {
	price = pricePerPeopleSpan * people * (double)((100 - discount) / 100);
}
else {
	price = pricePerPeopleSpan * people;
}