[Java] Scanner 클래스 메서드와 관련된 예제 풀어보기

5932 단어 JavaScannerJava

Scanner 클래스 메서드와 관련된 예제


[문제] Java Essential 예제 3-14 : 입력 오류 시 발생하는 예외

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를 감소시켜주는 것이다.


좋은 웹페이지 즐겨찾기