Quiz 4에서 강사님이 작성하신 if문과 달리 case문으로 작성해보았는데 피드백 부탁드립니다.
package chap_04;
public class _Quiz_04 {
public static void main(String[] args) {
int car = 3;
int fee = 0; // 시간당 4000원이므로 초기값을 0으로 저장하자
int max = 30000;
// 케이스가 명확하므로 switch문을 작성하는게 맞는데, 시간을 어떻게 반복?
switch (car)
{
case 1: // 일반 차량의 경우
for (int i = 1; i <= 5; i++) {
fee += 4000; // 팩토리얼 계산을 때려버림....
}
System.out.println("주차 요금은 " + fee + " 원입니다.");
break;
case 2:
for (int i = 1; i <= 5; i++) {
fee += 4000;
}
fee /= 2; // 최종 요금에서 50% 할인
System.out.println("주차 요금은 " + fee + " 원입니다.");
break;
case 3:
for (int i = 1; i <= 10; i++) {
fee += 4000;
if(fee > max) // fee가 최대 요금을 넘어가면
fee = max; // 최대 요금을 fee로 고정
}
fee /= 2; // 최종 요금에서 50% 할인
System.out.println("주차 요금은 " + fee + " 원입니다.");
}
}
}
// 일반 차량일 경우
// 경차일 경우
// 장애인 차량일 경우
저같은 경우, 케이스가 일반 차량, 경차, 장애인 차량으로 명확해서 case문으로 작성하였고, 시간당 4000원이라고 하여서 fee = 0 으로 먼저 초기화한 다음, 시간을 for문으로 돌려서 계산을 하였는데요. 이렇게 switch-case문 안에 for문을 작성해도 괜찮나요??
Answer 2
1
안녕하세요?
네, SwitchCase 문 내에서 for 반복문을 사용하는 것은 문제 없습니다. 코드를 보니 시간에 따른 계산을 어떻게 할지 고민하셨던 것 같아요. 일반 차량, 경차, 장애인 차량은 명확하므로 SwitchCase 로 접근하여 계산법을 다르게 하는 것은 좋은 접근 방법입니다. 다만 답글 적어주신 것처럼 시간 정보는 가변적이므로 시간을 담기 위한 변수를 외부에 따로 둔 다음에 간단히 4000 원만 곱하는 식으로 처리하는 게 좋겠습니다.
fee = hour * 4000;그러면 SwitchCase 내부에 여러 번 반복되는 불필요한 코드를 줄일 수 있을 것 같구요. 또한 경차 / 장애인 차량의 경우 적용되는 로직이 같으므로 case 를 통합해도 좋겠습니다. 처음 코드를 다음과 같이 바꿔봤는데 참고해주시면 좋겠습니다 😊
package chap_04;
public class _Quiz_04 {
public static void main(String[] args) {
int car = 1;
int fee = 0;
int max = 30000;
int hour = 5; // 주차시간 : 5 또는 10 등 자유롭게 설정
switch (car)
{
case 1: // 일반 차량
fee = hour * 4000;
if(fee > max)
fee = max;
break;
case 2: // 경차
case 3: // 장애인 차량
fee = hour * 4000;
if(fee > max)
fee = max;
fee /= 2;
break;
}
System.out.println("주차 요금은 " + fee + " 원입니다.");
}
}감사합니다.
0
아 정정합니다. for문으로 돌리면 시간복잡도가 늘어나게 되니까 강사님처럼 hour를 변수로 두고, fee = hour * 4000; 으로 하는게 바람직한 것 같습니다.
자바를 처음 배울 때 이런 고민이 드는 게 정상일까요?
0
133
2
static이 뭐였는지 기억이 안나요 ㅜㅜ
0
110
2
Iterator (알 수 없음) 데이터 삭제 후 초기화 관련 문의
0
69
1
사고력 키우는 법이 어떤게 있나요?
0
87
2
getter setter
0
100
2
섹션9. 66 메소드 오버로딩 시 질문이 있습니다.
0
77
1
안녕하세요 갑자기 프로그램 에러가 떠서 안되네요
0
75
2
변수 이름짓는법
0
114
2
intelli J 실행오류
0
114
2
혹시 이건 수학적 사고가 부족한 걸까요?
0
152
2
영상이 재생이 안됩니다.
0
163
3
이중 반복문 (후반전) 오른쪽으로 치우친 별 쌓기에 질문이 있습니다.
0
114
2
응용이 어렵습니다.
0
203
2
IntelliJ가 보이지 않습니다.
0
182
3
JDK 버전 문의
0
128
2
BlackBox 파일 내에서 메소드 정의
0
135
1
동기화
0
120
2
Iterator 문의
0
101
1
코드 순서 문의
0
139
1
클래스 메소드
0
146
2
Quiz_05 관련 질문드립니다 !
0
115
2
다운로드가 안됩니다
0
162
2
다형성
0
115
2
HashMap
0
75
2

