본문 바로가기

에러/JAVA

[에러] <JAVA> while문 안에서 catch문으로 InputMismatchException을 처리할 때 무한 루프가 발생하는 문제

문제가 발생한 코드

Scanner sc = new Scanner(System.in);

int n = 0;

while (true) {

    try {

        System.out.println("정수를 >>");

        n = sc.nextInt();

        if (n < 0 || n > 10) {

            System.out.println("1~10사이로 입력해주세요!");

        } else {

            System.out.println(n + "을 입력했습니다.");

            break;

        }

    } catch (InputMismatchException e) {

        System.out.println("정수를 입력해주세요!");

    }

}

콘솔 출력

원인

  • 처음에 입력한 문자열 값을 저장한 버퍼메모리를 비우지 않았기 때문이다.

해결

  • 버퍼를 비워야한다.

해결 코드

} catch (InputMismatchException e) {

    System.out.println("정수를 입력해주세요!");

     sc.nextLine();       

}