개인 프로젝트 : 계산기 만들기 Lv2

2024. 9. 19. 17:29·Project

▶ 오늘의 ISSUE

오늘은 계산기를 만들어보는 날입니다. 특정 요구사항들을 충족시키면서 만들어야 하는 개인 프로젝트 과제입니다.


▶ 요구사항

  1. 양의 정수(2개)를 입력받기 (Scanner 사용)
  2. 사칙연산 기호(+,-,*,/)를 입력받기 (Scanner 사용)
  3. 입력받은 데이터를 토대로 연산 진행 후 결과값 저장 및 출력 (ArrayList, if, switch 사용)
  4. 반복문은 종료를 알려주는 "exit" 문자열을 입력받을 때만 종료 (while문 사용)
  5. 연산 수행 및 결과값 반환 메서드 & 연산 결과를 저장하는 Calculator Class 생성
  6. App Class에서 Calculator Class 활용
  7. Calculator Class의 연산 결과를 저장하고 있는 필드에 접근하지 못하도록 캡슐화
  8. Calculator Class에 저장된 연산 결과들 중 가장 먼저(or 원하는 결과값) 저장된 데이터를 삭제하는 기능 구현 + App Class에서 해당 메서드 활용

▶ 소스코드

App Class

import java.util.*;

public class App {
    public static void main(String[] args) {
        Calculator calc = new Calculator(); // 연산 수행 및 결과 반환, 저장하는 인스턴스 생성
        Scanner sc = new Scanner(System.in);
        boolean checking = true; // 반복문 종료를 위한 변수
        int num1; // 첫 번째 입력값 저장 변수
        int num2; // 두 번째 입력값 저장 변수

        while (checking) { // 연산 반복 수행
            System.out.print("연산기호를 입력해주세요. : ");
            String str = sc.nextLine();

            System.out.print("첫 번째 값을 입력해주세요. : ");
            try {            // 잘못 입력된 값에 대한 오류처리
                num1 = Integer.parseInt(sc.nextLine());
                if(num1 < 0) {
                    System.out.println("0 미만의 수는 입력할 수 없습니다.");
                    continue;
                }
            } catch (Exception e) {
                System.out.println("값을 다시 입력해주세요.");
                continue;
            }
            System.out.print("두 번째 값을 입력해주세요. : ");
            try {            // 잘못 입력된 값에 대한 오류처리
                num2 = Integer.parseInt(sc.nextLine());
                if(num2 <= 0) {
                    System.out.println("0 이하의 수는 입력할 수 없습니다.");
                    continue;
                }
            } catch (Exception e) {
                System.out.println("값을 다시 입력해주세요.");
                continue;
            }

            calc.setcalc(str, num1, num2); // 입력받은 값 셋팅 후 결과값 저장

            System.out.println(calc.getResult()); // Calculator에 저장된 결과값 불러오기

            System.out.print("계속 진행(1) / 종료(2) / 삭제(3) 번호 입력 :");
            String check = sc.nextLine(); // 진행 여부 체크

            switch (check) {
                case "1" :        // 계속 진행
                    continue;
                case "2" :        // chechking에 false값을 줌으로써 while문 종료
                    checking = false;
                    break;
                case "3" :        // 저장된 값 중에 원하는 값 삭제하기 + 중복포함,미포함
                    System.out.print("삭제할 값을 입력하세요 :");
                    double delnum = Double.parseDouble(sc.nextLine());

                    System.out.print("중복값 포함(1) / 미포함(2) 번호 입력 :");
                    int all = Integer.parseInt(sc.nextLine());

                    calc.delete(all, delnum);    // 삭제 메서드
                    break;
                default :        // 잘못 입력 시 처음으로 이동
                    System.out.println("잘못입력하셨습니다. 처음으로 돌아갑니다.");
            }
        }
    }
}

Calculator Class

import java.util.*;

public class Calculator {        // 연산 수행 및 저장 + 결과값 반환
    private final ArrayList<Double> result = new ArrayList<>();
    private String operation;        // 연산 기호 저장
    private int num1;                // 첫 번째 값 저장
    private int num2;                // 두 번째 값 저장
    private double sum;                // ArrayList에 담기 위한 결과값 임시 저장
    public int error;                // 목록에 없는 연산기호 입력 시 초기로 이동

    public double getResult() {        // ArrayList에 저장된 결과값 반환
        int lastindex = result.size() - 1;        // \n값 때문에 -1 계산 후 저장
        if(lastindex < 0 || error == 1) {        // ArrayList 값이 없거나 에러값이 1이면 0값 리턴
            return 0;
        } else {
            return result.get(lastindex);
        }
    }

    public void setcalc(String operation, int num1, int num2) {        // 연산 셋팅
        this.operation = operation;
        this.num1 = num1;
        this.num2 = num2;
        calculate();
    }

    public void delete(int set, double num) {        // 지정된 결과값 ArrayList에서 삭제
        boolean chk;

        if(!result.contains(num)){
            System.out.println("해당 값은 존재하지 않습니다.");
        } else {
            if (set == 1) {        // 중복값 포함 제거
                chk = result.removeAll(Arrays.asList(Double.valueOf(num)));
                if (chk) System.out.println("정상적으로 삭제되었습니다." + record());
            } else if (set == 2) {        // 중복값 미포함 제거
                chk = result.remove(Double.valueOf(num));
                if (chk) System.out.println("정상적으로 삭제되었습니다." + record());
            }
        }
    }

    public ArrayList<Double> record() {        // 삭제 후 저장내역 확인 용도
        return result;
    }

    public void calculate() {        // 연산 수행 및 결과값 저장 + 반환
        error = 0;
        switch (operation) {
            case "+" :
                sum = num1 + num2;
                result.add(sum);
                break;
            case "-" :
                sum = num1 - num2;
                result.add(sum);
                break;
            case "*" :
                sum = num1 * num2;
                result.add(sum);
                break;
            case "/" :
                sum = num1 / num2;
                result.add(sum);
                break;
            default :
                System.out.println("해당 연산기호는 사용이 불가능합니다.");
                error = 1;
        }
    }
}

▶ 실행결과

실행결과


▶ 프로젝트 회고

문제점

  1. switch - while 트러블 발생
    • while문과 switch문의 break 중복 문제 발생
    • switch 안에서 해결이 불가해 boolean 변수를 사용해 문제 해결
  2. 초기값을 입력하지 않았을 때 발생하는 문제
    • 값을 입력하지 않으면 오류가 발생하는 문제를 예외 처리
  3. Calculator 클래스의 변수가 초기화되지 않는 문제
    • 상위에 선언된 변수들이 초기화되지 않아 메서드에서 따로 초기화를 진행
저작자표시 비영리 변경금지 (새창열림)

'Project' 카테고리의 다른 글

개인 프로젝트 : 일정 관리 앱 JPA ver  (0) 2024.10.16
개인 프로젝트 : 일정 관리 앱 Lv 3  (1) 2024.10.04
개인 프로젝트 : 숫자 야구 게임 만들기 Lv 4  (0) 2024.09.23
팀 프로젝트 : 우리 팀, 우리만의 이야기를 담을 수 있는 "팀 소개 웹페이지" 만들기  (0) 2024.09.19
'Project' 카테고리의 다른 글
  • 개인 프로젝트 : 일정 관리 앱 JPA ver
  • 개인 프로젝트 : 일정 관리 앱 Lv 3
  • 개인 프로젝트 : 숫자 야구 게임 만들기 Lv 4
  • 팀 프로젝트 : 우리 팀, 우리만의 이야기를 담을 수 있는 "팀 소개 웹페이지" 만들기
lastdove
lastdove
lastdove 님의 블로그 입니다.
  • lastdove
    lastdove 님의 블로그
    lastdove
  • 전체
    오늘
    어제
    • 분류 전체보기 (80)
      • Spring (16)
      • JAVA (17)
      • JAVA 알고리즘 (20)
      • Project (5)
      • SQL 문제풀이 (17)
      • Git&Linux (2)
      • Web development(입문) (2)
      • Sparta (1)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
lastdove
개인 프로젝트 : 계산기 만들기 Lv2
상단으로

티스토리툴바