Camp/Java

[TIL/JAVA] try-catch문 무한 루프

뭔가 한다 2024. 10. 23. 20:26

내일 배움 캠프의 야구게임 프로젝트 진행 중 catch 문에 접근하게 되면 무한 루프에 빠지는 문제를 발견했다.

내부에는 print와 scanner밖에 없었기에 더 이해가 안되서 찾아봤다.

try {
    System.out.print("숫자를 입력해 주세요: ");
    inputResultNum = scanner.nextInt();
} catch (Exception e) {
    System.out.println("숫자만 입력 가능합니다.");
    // 다시 재 입력을 받을 수 있도록 continue
    continue;
}

 

찾아보니 scanner로 받은 값이 정상처리되지 않아 버퍼에 남아있게 되어 발생하는 문제였다.

아래처럼 에러 발생 시 scanner를 초기화 시키니 문제가 해결 되었다.

try {
    System.out.print("숫자를 입력해 주세요: ");
    inputResultNum = scanner.nextInt();
} catch (Exception e) {
    System.out.println("숫자만 입력 가능합니다.");
    // 무한 루프 발생으로 인한 입력 초기화
    scanner.next();
    continue;
}

 

scanner.**() 를 통해 사용한 문자열을 모두 리턴하여 버퍼를 비움