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");
}
}
'문제 해결 (troubleshooting) > Java' 카테고리의 다른 글
List.of()로 만든 리스트에서 add()가 안 되는 이유 (0) | 2025.04.30 |
---|---|
java: incompatible types: T cannot be converted to capture#1 of ? (0) | 2025.04.21 |