package org.example;
import java.util.InputMismatchException;
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int input = 0;
while (true) {
System.out.printf("숫자 : ");
try {
// saa
input = sc.nextInt(); // 대기, 숫자 하나 입력될 때 까지
sc.nextLine(); // 버퍼를 비운다.
break;
} catch (InputMismatchException e) {
System.out.println("숫자를 입력해주세요.");
}
}
System.out.printf("입력된 숫자 : %d\n", input);
sc.close();
}
}
예전에 과제를 할 때 scanner 계속 입력 받는 걸 작성했었는데 타입이 맞지 않는 것을 입력하면
이런 식으로 갑자기 지혼자 급발진하면서 무한루프를 돌아버린다.
왜 그런가 했더니
try {
// saa
input = sc.nextInt(); // 대기, 숫자 하나 입력될 때 까지
sc.nextLine(); // 버퍼를 비운다.
break;
} catch (InputMismatchException e) {
sc.nextLine(); // 버퍼를 비운다.
System.out.println("숫자를 입력해주세요.");
}
잘못된 입력을 했을 때 안에 약간 찌꺼기? 그런게 남아있다고 한다.
그래서 이런 식으로 catch문 안에 버퍼를 지우는 sc.nextLine()을 해줘야 한다.