TIL 계산기 level-1 구현

Seo_Thousand_Won·2024년 4월 24일

TIL

목록 보기
5/16

level_1

Github branch Level1 바로가기

기능

  1. 사용자로부터 정수 2개 및 사칙연산 기호 입력
  2. 입력값에 대한 결과는 별도로 저장
  3. 사용자로부터 "inquiry" 입력 시 저장 결과 전체 출력
  4. 사용자로부터 "remove" 입력 시 가장 먼저 입력한 값 삭제
  5. 사용자로부터 "exit" 입력 시 프로그램 종료

App.java

import java.util.*;

/**
 * TODO
 * 8. “**inquiry”라는 문자열이 입력되면 저장된 연산 결과 전부를 출력합니다.**
 *      - foreach(향상된 for문)을 활용하여 구현 해봅니다.
 */
public class App {

    public static void main(String[] args) {
        // Scanner 객체 생성
        Scanner sc = new Scanner(System.in);
        //연산 결과를 저장 v1
        Queue<Integer> opArr = new LinkedList<>();

        String flag = "";
        while (!flag.equals("exit")) {
            //사용자로부터 첫 번째 숫자 입력
            System.out.print("첫 번째 숫자를 입력하세요: ");
            String firstStr = sc.nextLine();
            //사용자로부터 두 번째 숫자 입력
            System.out.print("두 번째 숫자를 입력하세요: ");
            String secondStr = sc.nextLine();

            //firstStr과 secondStr이 정수인지 판별
            int firstNum, secondNum;
            try {
                firstNum = Integer.parseInt(firstStr);
                secondNum = Integer.parseInt(secondStr);
            } catch (NumberFormatException e) {
                System.out.println("잘못된 입력입니다. 숫자를 입력하세요.");
                continue;
            }

            //사용자로부터 사칙연산 기호 입력
            System.out.print("사칙연산 기호를 입력하세요: ");
            char operator = sc.nextLine().charAt(0);
            int result = 0;
            //연산 기호에 따라 계산을 수행
            try {
                result = switch (operator) {
                    case '+' -> firstNum + secondNum;
                    case '-' -> firstNum - secondNum;
                    case '*' -> firstNum * secondNum;
                    case '/' -> {
                        if (secondNum == 0) {
                            throw new IllegalArgumentException("나눗셈 연산에서 분모(두 번째 정수)에 0이 입력될 수 없습니다.");
                        }
                        yield firstNum / secondNum;
                    }
                    default -> throw new IllegalArgumentException("[ +, -, /, * ] 이외에 입력되었습니다.");
                };
            } catch (IllegalArgumentException e) {
                System.out.println(e.getMessage());
            }

            opArr.add(result);
            System.out.println("결과 = " + opArr.peek() + "\n");

            System.out.println("가장 먼저 저장된 연산 결과를 삭제하시겠습니까? (remove 입력 시 삭제)");

            if (sc.nextLine().equals("remove")) {
                if (!opArr.isEmpty()) {
                    System.out.println("remove = " + opArr.poll());
                }
            }

            System.out.println("저장된 연산결과를 조회하시겠습니까? (inquiry 입력 시 조회)");
            if (sc.nextLine().equals("inquiry")) {
                int index = 1;
                for (Integer i : opArr) {
                    System.out.println(index + "번째 결과는 = " + i);
                    index++;
                }
            }

            System.out.println("더 계산하시겠습니까? (exit 입력 시 종료)");
            flag = sc.nextLine();
        }
    }
}

문제점

Level1 요구사항에 맞춰 구현하면서 App에 모든 기능이 담겨있다.
저장, 조회, 삭제, 예외처리까지 완벽하지 못하다.
Level2에는 메서드, 예외처리, 상속 및 다형성 객체지향적으로 리팩토링 해보겠다.

0개의 댓글