try-catch-finally 블록을 이용하여 정수를 0 으로 나누는 경우에
"0으로 나눌 수 없습니다"를 출력하는 프로그램을 작성하라
⌨️ 코드 작성
import java.util.InputMismatchException;
import java.util.Scanner;
public class IntputMis {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("정수를 입력하세요");
int sum = 0, n = 0;
for (int i = 1; i <= 3; i++) {
System.out.print(i + ">>");
try {
n = scanner.nextInt();
}
catch (InputMismatchException e) {
System.out.println("정수를 써야 합니다.");
scanner.next(); //이 부분 주목
i--;
continue;
}
sum += n;
}
System.out.println("합은 " + sum);
scanner.close();
}
}
👉🏻 결과
k를 넣었을 때 예외가 발생하고, catch문으로 간다.
k는 nextInt()에서 예외가 발생하여 반환되지 못했으므로, 입력 버퍼에 저장이 된다.
따라서 next() 로 입력 버퍼에 저장되어있는 문자 k를 입력받아서, 입력 버퍼에 있는 k를 없애줘야 그 다음 반복문에서의 nextInt()가 정상적으로 수행된다.
i--는 다시 반복문의 조건식을 확인하러갈 때 예외 여부와 상관없이 i++가 될 것을 대비해 미리 i를 감소시켜주는 것이다.