Day 13

강태훈·2026년 1월 15일

nbcamp TIL

목록 보기
13/58

금일 진행사항
객체지향 복습
인텔리제이 기능 학습(단축키👍)
과제 해설 공부



내 과제 비교해보기


public class App {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Calculator calculator = new Calculator();
        // 객체 생성

        int i = 0;

        while (true) {
            System.out.print("첫 번째 숫자를 입력하세요: ");
            int num1 = sc.nextInt();

            System.out.print("계산할 부호를 입력하세요( +, -, *, /, % ): ");
            char sign = sc.next().charAt(0);

            System.out.print("두 번째 숫자를 입력하세요: ");
            int num2 = sc.nextInt();

            if((sign == '/' || sign == '%') && (num2 == 0)) {
                System.out.println("0으로 나눌 수 없습니다");
                continue;
            }

            calculator.setElement(num1, num2, sign);
//            calculator.sum(num1, num2, sign);
            int result = calculator.getResult();

            if(sign == '+' || sign == '-' ){
                System.out.println("결과: " + result);
            }
            else if(sign == '*'){
                System.out.println("결과: " + result);
            }
            else if (sign == '/' || sign == '%') {
                System.out.println("결과: " + result);
            }
            else{
                System.out.println("부호가 잘못 입력 되었습니다.");
            }
            // switch는 사용했으니 else if 사용해보기

            String emptybox = sc.nextLine();
            // enter 제거용

            System.out.print("더 계산하시겠습니까?(exit입력시 종료) ");
            String word = sc.nextLine();
            if (word.equals("exit")) {
                System.out.println("계산을 종료합니다...");
                break;
            }

            i++;

        }

        System.out.print("계산 목록을 보시겠습니까?(list 입력시 출력): ");
        String list = sc.nextLine();

        // 계산기록 행렬 불러오기
        ArrayList<String[]> data = calculator.getData();
        if (list.equals("list")) {
            for (int count = 0; count<=i; count++) {
                System.out.println(
                        data.get(count)[0] + " "
                        + data.get(count)[1] + " "
                        + data.get(count)[2] + " = "
                        + data.get(count)[3]
                );
            }
        }
        int delenum = 0;
        while(i >= 0){
            System.out.print("오래된 계산 기록을 지우시겠습니까?(delete 입력시 삭제): ");
            String dele = sc.nextLine();

            if (dele.equals("delete")) {
                System.out.println( ++delenum + "번째 기록을 삭제합니다...");
                calculator.removeResult();

               i--;

            }
            else{
                break;
            }
        }
        System.out.println("프로그램을 종료합니다...");
    }
}
public class Calculator {

    private ArrayList<String[]> data = new ArrayList<>();

    private int index = 0;
    //계산기록을 저장할 2차원 행렬과 행번호를 매기기 위한 index

    private int result = 0;
    private int num1;
    private int num2;
    private char sign;

    public void setElement(int num1, int num2, char sign){
        this.num1 = num1;
        this.num2 = num2;
        this.sign = sign;
        sum();
    }

    private void sum () {

        switch (sign) {
            case '+':
                result = num1 + num2;
                break;
            case '-':
                 result = num1 - num2;
                 break;
            case '*':
                result = num1 * num2;
                break;
            case '/':
                result = num1 / num2;
                break;
            case '%':
                result = num1 % num2;
                break;
            default:
                break;
        }

        data.add(new String[4]);
        data.get(index)[0] = String.valueOf(num1);
        data.get(index)[1] = String.valueOf(sign);
        data.get(index)[2] = String.valueOf(num2);
        data.get(index)[3] = String.valueOf(result);
        // TODO : 문자형 배열에 정수값이 안들어가서 정수를 문자형으로 변환후 대입

        index++;
    }
    public int getResult() {
        return this.result;
    }
    // 계산 결과 return

    public ArrayList<String[]> getData() {
        return this.data;
    }
    // 계산기록 return getter 적용

    public void removeResult() {
        data.remove(0);
    }

}


과제 해설


public class Calculator {

    private final List<Integer> results = new ArrayList<>(); 

    public Integer calculate(int num1, int num2, char operator) {
        int result;

        switch (operator) {
            case '+' -> result = num1 + num2;
            case '-' -> result = num1 - num2;
            case '*' -> result = num1 * num2;
            case '/' -> {
                if (num2 == 0) {
                    throw new ArithmeticException("0으로 나눌 수 없습니다.");
                }
                result = num1 / num2;
            }
            default -> throw new IllegalArgumentException("지원하지 않는 연산자입니다.");
        }

        results.add(result);
        return result;
    }

    public List<Integer> getResults() {
        return results;
    }

    public void removeResult() {
        results.remove(0);
    }

}
public class App {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        Calculator calculator = new Calculator();
        String exit = "";

        while (!exit.equals("exit")) {
            // 양의 정수 (0을 포함)
            System.out.println("첫 번째 숫자를 입력하세요: ");
            int num1 = sc.nextInt();

            if (num1 < 0) {
                System.out.println("0을 포함한 양의 정수만 입력 가능합니다.");
                return;
            }

            System.out.println("두 번째 숫자를 입력하세요: ");
            int num2 = sc.nextInt();

            if (num2 < 0) {
                System.out.println("0을 포함한 양의 정수만 입력 가능합니다.");
                return;
            }

            System.out.println("사칙연산 기호를 입력하세요: ");
            char operator = sc.next().charAt(0);

            Integer result = calculator.calculate(num1, num2, operator);
            System.out.println("결과: " + result);

            System.out.println("현재 저장된 결과들: " + calculator.getResults());

            System.out.println("가장 먼저 저장된 결과를 삭제하시겠습니까? (yes), 다음 단계는 아무 값 입력");
            String answer = sc.next();
            if ("yes".equals(answer)) {
               calculator.removeResult();
                System.out.println("가장 먼저 저장된 결과 삭제 후: " + calculator.getResults());
            }

            System.out.println("종료를 원하면 exit / 계속하려면 아무 글자 입력");
            exit = sc.next();
        }

        System.out.println("계산기를 종료합니다.");
        sc.close();
    }

}

0개의 댓글