[Java 프로젝트: Calculator] 트러블 슈팅 TIL_2

coldrice99·2024년 9월 5일
0

트러블 슈팅 TIL: 입력 검증 및 변수 선언 오류 해결

이번에는 자바로 간단한 계산기 프로그램을 작성하던 중 발생한 문제와 그 해결 과정을 공유하려 한다.

1. 입력 검증 부족

계산기 프로그램에서는 사용자가 입력하는 두 정수에 대한 검증이 부족한 상태였다. 예를 들어, 사용자가 num1num2에 정수가 아닌 값을 입력할 경우, 프로그램이 중단될 수 있었다. 이를 방지하기 위해 입력값에 대한 예외 처리가 필요했다.

해결 방법:

  • try-catch 블록을 사용하여 InputMismatchException을 처리하여, 사용자가 정수가 아닌 값을 입력할 경우 오류 메시지를 출력하고 다시 입력을 받도록 수정하였다.
try {
    // Step1 : 두 양의 정수 입력
    System.out.print("첫 번째 숫자를 입력하세요: ");
    int num1 = sc.nextInt();

    System.out.print("두 번째 숫자를 입력하세요: ");
    int num2 = sc.nextInt();
} catch (InputMismatchException e) {
    System.out.println("잘못된 입력입니다. 정수를 입력해주세요.");
    sc.nextLine(); // 입력 버퍼를 비우기
    continue;
}

2. 변수 선언 문제로 인한 에러 발생

여기서 발생한 문제는 아래와 같다.

C:\Users\ADWIN\Desktop\Coding\JAVA_\Calculator\src\Calculator_Lv2\App.java:32:33
java: cannot find symbol
  symbol:   variable num1
  location: class Calculator_Lv2.App

이 에러는 num1 변수가 try 블록 내에서 선언되어 try 블록 밖에서는 사용할 수 없기 때문에 발생한 오류이다. 자바에서 try 블록 내부에서 선언한 변수는 해당 블록을 벗어나면 접근할 수 없다. 따라서 변수를 try 블록 외부에 미리 선언한 다음, try 블록 안에서 값을 할당해야 한다.

해결 방법

변수를 try 블록 외부에서 선언하고, 그 안에서 값을 할당하도록 코드를 수정하였다.

public class App {
    public static void main(String[] args) {
        Calculator calc = new Calculator();
        Scanner sc = new Scanner(System.in);

        while (true) {
            int num1 = 0; // try 블록 밖에서 선언
            int num2 = 0;

            try {
                // Step1 : 두 양의 정수 입력
                System.out.print("첫 번째 숫자를 입력하세요: ");
                num1 = sc.nextInt(); // try 블록에서 값 할당

                System.out.print("두 번째 숫자를 입력하세요: ");
                num2 = sc.nextInt(); // try 블록에서 값 할당
            } catch (InputMismatchException e) {
                System.out.println("잘못된 입력입니다. 정수를 입력해주세요.");
                sc.nextLine(); // 입력 버퍼를 비우기
                continue;
            }

            // Step3 : 연산 수행 및 결과 출력
            double result = calc.calculate(num1, num2, operator);
            System.out.println("결과: " + result);
        }

        sc.close();
    }
}

결론

이번 트러블 슈팅은 입력 검증 부족과 변수 선언 범위 문제로 인해 발생한 에러를 해결하는 과정이었다. 이 과정에서 배운 교훈은, 자바에서는 try 블록 내에서 변수를 선언하면 해당 블록 외부에서 사용할 수 없으므로 변수를 미리 선언해야 한다는 점이다.

profile
서두르지 않으나 쉬지 않고

0개의 댓글