인프런 커뮤니티 질문&답변

실버레인님의 프로필 이미지
실버레인

작성한 질문수

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

문제와 풀이1

[은행 계좌 입출금 코드 작성] 해당 코드도 맞는지 궁금합니다.

해결된 질문

작성

·

625

·

수정됨

0

 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.


1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
안녕하세요, 다름이 아니라 [김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음] / 9. 메서드 / 은행 계좌 입출금 문제에 관련하여 질문이 있어 작성하게 되었습니다.

해당 문제에 대해 입력값은 다음과 같다고 생각하고 BufferedReader로 풀었습니다.

1 10000
2 8000
2 3000
3
4
package method;

// TODO 1. 공통 출력 부분을 start()라는 메서드로 따로 빼서 반복 호출하여 수행
// TODO 2. 입금 출금 등 요구 사항에 따라 구현이 다른 부분을 메서드로 추출
// TODO 3. 이때, 선택에 따른 숫자값과 입금액 및 출금액 등을 파라미터로 전달
// TODO 4. 잔액 확인 및 종료는 별다른 연산이 필요 없으므로 void로 설계
// TODO 5. 이때, 종료는 종료라는 책임이 해당 메서드에 배당이 되어야 하므로 메서드 내부에서 System.exit(0);을 수행

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Method {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        String str;

        int balance = 0;
        while ((str = br.readLine()) != null) {
            st = new StringTokenizer(str, " ");
            int index = Integer.parseInt(st.nextToken());
            // TODO Operator '==' cannot be applied to 'boolean', 'int'
            // TODO == 연산자는 boolean 타입과 int 타입 사이에서 지원 / 적용될 수 없습니다. -> int가 아닌 boolean을 지원한다는 것
            int money = (st.hasMoreTokens()) ? depositOrWithdraw(st) : 0;

            if (index == 1) {
                balance = deposit(index, balance, money);
            } else if (index == 2) {
                balance = withDraw(index, balance, money);
            } else if (index == 3) {
                check(index, balance);
            } else {
                exit(index);
            }
        }
    }

    private static int depositOrWithdraw(StringTokenizer st) {
        return Integer.parseInt(st.nextToken());
    }

    private static void start() {
        System.out.println("---------------------------------");
        System.out.println("1.입금 | 2.출금 | 3.잔액 확인 | 4.종료");
        System.out.println("---------------------------------");
    }

    private static int deposit(int index, int balance, int depositAmount) {
        start();
        System.out.println("선택: " + index);

        balance += depositAmount;
        System.out.println("입금액을 입력하세요: " + balance);
        System.out.println(balance + "원을 입금하였습니다. 현재 잔액: " + balance + "원");

        return balance;
    }

    private static int withDraw(int index, int balance, int withdramAmount) {
        start();
        System.out.println("선택: " + index);

        if (balance >= withdramAmount) {
            balance -= withdramAmount;
            System.out.println("출금액을 입력하세요: " + withdramAmount);
            System.out.println(balance + "원을 출금하였습니다. 현재 잔액: " + balance + "원");
        } else {
            System.out.println(withdramAmount + "원을 출금하려 했으나 잔액이 부족합니다.");
        }

        return balance;
    }

    private static void check(int index, int balance) {
        start();
        System.out.println("선택: " + index);
        System.out.println("현재 잔액: " + balance + "원");
    }

    private static void exit(int index) {
        start();
        System.out.println("선택: " + index);
        System.out.println("시스템을 종료합니다.");
        System.exit(0);
    }
}

 

그런데, 답지 코드를 보니 BufferedReader가 아닌 Scanner더군요.

제가 아직 Scanner는 잘 써보지 않아서 입력값이 주어지지 않은 상황에서 Scanner로 작성된 코드를 BufferedReader로 어떻게 변환해야할지를 잘 모르겠습니다.

 

따라서 질문은 다음과 같습니다.

  1. 입력값이 위와 같이 주어진다고 생각하고 푸는게 맞는지

  2. 맞다면, 해당 BufferedReader 코드도 동일한 값을 내는게 맞는지

  3. 아니라면, 어느 부분을 잘못 작성하였으며 어떻게 수정하면 되는 것인지

  4. 앞으로 하드 코딩이 아니라 프로그램을 작성하는 문제에 대해서는 입력값을 어떻게 고려하여 작성하면 좋을지 궁금합니다.

 

감사합니다.

 

답변 1

2

안녕하세요. 실버레인님, 공식 서포터즈 David입니다.

  1. 실행 예시를 자세히 보시면 1 10000 과 같이 입력되는 부분이 없음을 알 수 있습니다.

  2. 이 부분은 제가 바로 알려드리기보다 실행예시를 분석하셔서 프로그램이 제공하는 안내, 입력, 출력을 고민해 보시면 좋을 것 같습니다. 또한 풀이도 제공하고 있으니 풀이를 참고해 주세요.

  3. 주어진 요구사항을 꼼꼼하게 분석하는 게 프로그래밍에서 상당히 중요합니다. 주어진 예시에서 어떤 부분이 입력인지, 출력인지부터 분석해 보시면 좋을 것 같습니다.

감사합니다.

실버레인님의 프로필 이미지
실버레인

작성한 질문수

질문하기