java를 사용하여 사칙연산 계산기를 구현하는 과정에서, 연산 수행 후 결과를 출력하는 로직에서 입력처리가 부족하여 오류가 발생했다.
💡 예상동작
★ 올바른 연산자 입력시 정상적으로 결과 출력
★ 잘못된 연산자 입력시 결과를 출력하지않고 오류메시지만 출력
★ 0으로 나누는 경우 연산이 수행되지않고 오류메시지만 출력
✘✘ 잘못된 연산자 입력시 : result가 초기값 0으로 출력됨
✘✘ 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)를 사용하여 연산이 유효한 경우에만 결과를 출력해야한다
✴︎ 예외처리하기
✴︎ 조건문의 실행되는 순서를 잘 설정하기
더 계산하겠냐는 질문에 "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 루프의 흐름을 정확하게 이해해야겠다
✴︎ 문제가 발생하면 흐름을 따라가면서 디버깅하는 습관을 들여야겠다