calculator 과제 TIL

ehllll·2025년 3월 5일

1️⃣ 1번째

🚨 문제 상황

java를 사용하여 사칙연산 계산기를 구현하는 과정에서, 연산 수행 후 결과를 출력하는 로직에서 입력처리가 부족하여 오류가 발생했다.
💡 예상동작
★ 올바른 연산자 입력시 정상적으로 결과 출력
★ 잘못된 연산자 입력시 결과를 출력하지않고 오류메시지만 출력
★ 0으로 나누는 경우 연산이 수행되지않고 오류메시지만 출력

✘✘ 잘못된 연산자 입력시 : result가 초기값 0으로 출력됨
✘✘ 0으로 나누는 경우 : "0으로 나눌수 없다"는 문구가 출력되지만, 결과:0 이 함께 출력됨

🧐 문제 원인 분석

  • boolean valid = true; 변수를 사용하지않아,
    ✘✘ 잘못된 연산자 입력시에도 결과:0이 출력
    ✘✘ 0으로 나누는 경우에도 연산이 방지되지않고 결과:0이 출력

이때의 코드

int result = 0;  

switch (sign1) {  
    case '+':  
        result = num1 + num2;  
        break;  
    case '-':  
        result = num1 - num2;  
        break;  
    case '*':  
        result = num1 * num2;  
        break;  
    case '/':  
        if (num2 == 0) {  
            System.out.println("0으로 나눌 수 없습니다.");  
        } else {  
            result = num1 / num2;  
        }  
        break;  
    default:  
        System.out.println("+, -, *, / 중에 입력해주세요");  
}  

System.out.println("결과: " + result);  

⚙️ 해결 방법

✅ boolean valid=true; 변수를 추가하여 정상적인 연산일때만 결과를 출력하도록 변경

수정된 코드 ✔︎

boolean valid = true;  

switch (sign1) {  
    case '+':  
        result = num1 + num2;  
        break;  
    case '-':  
        result = num1 - num2;  
        break;  
    case '*':  
        result = num1 * num2;  
        break;  
    case '/':  
        if (num2 == 0) {  
            System.out.println("0으로 나눌 수 없습니다.");  
            valid = false;    
        } else {  
            result = num1 / num2;  
        }  
        break;  
    default:  
        System.out.println("+, -, *, / 중에 입력해주세요");  
        valid = false;    
}  

if (valid) {  
    System.out.println("결과: " + result);  
}

📍 최종 결론

❗️문제상황
: 잘못된 연산자 입력시 결과가 0으로 출력됨
❗️원인
: boolean valid = true; 없이 result가 기본값 0으로 설정됨
❗️해결방법
: valid 변수를 추가하여 올바른 연산이 수행될때만 결과 출력


‼️ 문제상황
: 0으로 나누는 경우에도 결과가 0으로 출력됨
‼️ 원인
: if(num2==0)조건만 체크하고 결과 출력을 막지 않음
‼️ 해결방법
: valid=false;로 설정하여 연산이 실패한경우 결과를 출력하지 않도록 개선


🏁 잘못된 입력이 있을 경우 결과가 출력되지 않도록 동작
🏁 0 나누기 예외 처리 동작

🌟 배운점

✴︎ 플래그변수(boolean valid)를 사용하여 연산이 유효한 경우에만 결과를 출력해야한다
✴︎ 예외처리하기
✴︎ 조건문의 실행되는 순서를 잘 설정하기





2️⃣ 2번째

🚨 문제 상황

더 계산하겠냐는 질문에 "yes"를 입력하면 프로그램이 계속 실행되지 않고 종료되는 문제가 발생했다.
💡 예상 동작
★ "yes"를 입력하면 루프가 계속되어 다음 계산을 할 수 있어야함
★ "exit"을 입력하면 프로그램이 종료되어야함
★ "clear"를 입력하면 최근 결과가 초기화되어야함

🧐 문제 원인 분석

📌 while 루프의 흐름을 살펴보았을때,
1. 사용자가 "yes" 입력 → if(check.equals("yes") 실행
2. "계산을 계속합니다!" 메시지 출력
✘✘ else if(check.equals("exit"))를 실행할 기회를 얻지 못함
✘✘ while 루프가 끝까지 실행되면서 프로그램 종료됨

이때의 코드

System.out.println("더 계산하시겠습니까? (yes: 계속, exit: 종료, clear: 최근 결과 삭제): ");
String check = scanner.next();

if (check.equals("yes")) {  
    System.out.println("계산을 계속합니다!");  
} else if (check.equals("exit")) {  
    System.out.println("계산기를 종료합니다!");  
    break;  
} else if (check.equals("clear")) {  
    calculator.clearResult();  
    System.out.println("최근 결과가 초기화되었습니다 / 현재 결과: " + calculator.getLastResults());  
}

⚙️ 해결 방법

✅ "exit"을 먼저 체크하여 프로그램이 즉시 종료되도록 변경

수정된 코드 ✔︎

System.out.println("더 계산하시겠습니까? (yes: 계속, exit: 종료, clear: 최근 결과 삭제): ");
String check = scanner.next();

if (check.equals("exit")) {  
    System.out.println("계산기를 종료합니다!");  
    break;  
} else if (check.equals("yes")) {  
    System.out.println("계산을 계속합니다!");  
} else if (check.equals("clear")) {  
    calculator.clearResult();  
    System.out.println("최근 결과가 초기화되었습니다 / 현재 결과: " + calculator.getLastResults());  
}

📍 최종 결론

❗️문제상황
: "yes" 입력시 프로그램이 종료됨
❗️원인
: "yes"을 if의 첫번째 조건으로 두었기때문
❗️해결방법
"exit"을 먼저 체크하여 즉시 종료되도록 변경


🏁 "yes" 입력시 프로그램이 정상적으로 계속 실행됨
🏁 "exit" 입력시 프로그램이 즉시 종료됨
🏁 "clear" 입력시 결과가 정상적으로 초기화됨

🌟 배운점

✴︎ 조건문의 순서가 중요하다
✴︎ while 루프의 흐름을 정확하게 이해해야겠다
✴︎ 문제가 발생하면 흐름을 따라가면서 디버깅하는 습관을 들여야겠다

0개의 댓글