John's Code Journey

[TIL] 계산기 과제 수정 본문

Today I Learned/스파르타 내일배움캠프

[TIL] 계산기 과제 수정

Johnnnn 2025. 3. 11. 23:56
728x90

계산기 과제 피드백을 바탕으로 코드수정을 했다.

튜터님께 이러한 피드백을 받았다.

Lv1 - while문의 조건절에는 true를 주는 것 보다는 해당 while을 종료하기 위한 식을 작성해주거나 boolean 변수로 무한 루프가 발생할 수 있는 부분을 방지해주시는게 중요합니다. - 입력 값이 숫자형이 아닌 경우 Integer.parseInt()로 파싱 시 InputMismatchException이 발생할 수 있습니다. 해당 부분을 try - catch로 예외처리 해보시면 좋겠어요. - “exit”의 경우 전역변수로 선언하여 사용해도 괜찮지만 해당 코드의 경우 static final로 상수처리하여 사용하는게 더 적합하겠어요. - input.equals("exit") 과 같이 동등비교하실 때에는 상수값을 앞에두고 비교하시면 NPE를 방지 할 수 있습니다. “exit”.equals(input)

 

package calculatorlevel2;
import java.util.Scanner;

public class App {
    private static final String exit = "exit";

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        Calculator calculator = new Calculator();

        boolean flag = true;
        while (flag) {
            double n1 = 0;
            System.out.print("첫 번째 숫자를 입력하세요 (종료하려면 'exit'을 입력하세요): ");
            String firstNum = scanner.nextLine();
            if (exit.equalsIgnoreCase(firstNum)) {
                System.out.println("계산기를 종료합니다.");
                break;
            }

            //예외처리 추가 : 입력 값이 숫자가 아닐 겅우 다시 입력 받기
            try {
                n1 = Double.parseDouble(firstNum);
            } catch(NumberFormatException e) {
                System.out.println("잘못된 입력입니다. 숫자를 입력하세요.");
                continue; // 다시 반복문으로 돌아가서 입력받기
            }

            double n2 = 0;
            System.out.print("두 번째 숫자를 입력하세요: ");
            String secondNum = scanner.nextLine();
            if (exit.equalsIgnoreCase(secondNum)) {
                System.out.println("계산기를 종료합니다.");
                break;
            }

            try{
                n2 = Double.parseDouble(secondNum);
            }catch(NumberFormatException e){
                System.out.println("잘못된 입력입니다. 숫자를 입력하세요.");
                continue; // 다시 반복문으로 돌아가서 입력받기
            }


            System.out.print("사칙연산 기호를 입력하세요 (+, -, *, /): ");
            String op = scanner.nextLine();
            if (exit.equalsIgnoreCase(op)) {
                System.out.println("계산기를 종료합니다.");
                break;
            }

            // 나누기 연산에서 분모가 0일 경우 다시 입력 받기
            while (op.equals("/") && n2 == 0) {
                System.out.println("분모는 0일 수 없습니다. 다른 값을 입력해주세요.");
                System.out.print("두 번째 숫자를 다시 입력하세요: ");
                secondNum = scanner.nextLine();
                try {
                    n2 = Double.parseDouble(secondNum);  // 새로운 값을 받음
                } catch (NumberFormatException e) {
                    System.out.println("잘못된 입력입니다. 숫자를 입력해주세요.");
                    continue;  // 다시 반복문으로 돌아가서 입력 받기
                }
            }


            // 연산 수행
            double result = calculator.calculate(n1, n2, op);
            System.out.println("계산 결과: " + result);
            System.out.println();  // 계산 후 공백 한 줄 추가

            // 연산 결과 출력
            System.out.println("저장된 연산 결과들:");
            for (Double res : calculator.getResults()) {
                System.out.println(res);
            }

            // 연산 결과 삭제 (예시로 가장 먼저 저장된 결과를 삭제)
            System.out.print("가장 먼저 저장된 연산 결과를 삭제하시겠습니까? (y/n): ");
            String deleteChoice = scanner.nextLine();
            if (deleteChoice.equalsIgnoreCase("y")) {
                calculator.removeFirstResult();
            }

        }

    }
}

 

'Today I Learned > 스파르타 내일배움캠프' 카테고리의 다른 글

[TIL] 네트워크  (0) 2025.03.18
[TIL] 키오스크 과제  (0) 2025.03.13
[TIL] JAVA 컬렉션 프레임워크  (1) 2025.03.10
[TIL] 250305 계산기 과제 리뷰  (1) 2025.03.05
[TIL] 예외처리(Exception)  (0) 2025.02.26