문제 해결 (troubleshooting)/Java

반복문 안에서 InputMismatchException 예외 발생 시 무한 루프 발생

가지코딩 2025. 4. 18. 12:00

 

while문 안에서 Scanner 입력 오류로 안해 무한 루프가 발생했다...

 

 

기존 코드

  • InputMismatchException 발생되면, catch (Exception e) 에서 잡힌다.
  • 하지만, 버퍼가 비워지지 않아 continue -> InputMismatchException ->  continue -> ... 무한 굴레에 빠지게 되었다.
while(true){
	try {
        num1 = sc.nextInt();	// 문자열 입력 시 InputMismatchException 발생 !
        num2 = sc.nextInt();
        sc.nextLine(); // 버퍼 비우기

        ...

    } catch (Exception e) {
        System.out.println("잘못된 입력: " + e.getMessage() + "\n");
    }
}

 

입력: ㅇㅇ

 

 

해결 고민

 

처음엔 단순히, 이렇게 코드를 수정했다.

catch (Exception e) {
    System.out.println("잘못된 입력: " + e.getMessage() + "\n");
    sc.nextLine(); // 버퍼 비우기
}

 

 

하지만 문자열 입력 뒤에도 버퍼가 비워지면서 또 다른 문제가 발생했다.

 

(현 상황에 대한 GPT의 답변)

 

그렇기에, 다른 catch 절을 추가하는 방식을 선택했다.

catch(InputMismatchException e) {
    System.out.println("잘못된 입력: " + "양의 정수(0포함)을 입력해주세요." + "\n");
    sc.nextLine(); // 버퍼 비우기
}

 


 

수정된 코드

while(true) {
    try {
        num1 = sc.nextInt();
        num2 = sc.nextInt();
        sc.nextLine(); // 버퍼 비우기

        ...

    } catch(InputMismatchException e){
        System.out.println("잘못된 입력: " + "양의 정수(0포함)을 입력해주세요." + "\n");
        sc.nextLine(); // 버퍼 비우기
    } catch (Exception e) {
        System.out.println("잘못된 입력: " + e.getMessage() + "\n");
    }
}