inflearn logo
강의

Course

Instructor

Java Basics by Nadokoding - Full Course (20 hours)

Quiz #4

Quiz 4에서 강사님이 작성하신 if문과 달리 case문으로 작성해보았는데 피드백 부탁드립니다.

Resolved

737

Ambition

61 asked

0

 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문을 작성해도 괜찮나요??

 

java 객체지향 switch-case

Answer 2

1

nadocoding

안녕하세요?
네, 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

Ambition

아 정정합니다. 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

114

2

다운로드가 안됩니다

0

162

2

다형성

0

115

2

HashMap

0

75

2