OOP 과제 [예외 처리]

TIL·2023년 1월 8일
0

Java (최은빈)

목록 보기
27/27

1. 예외 전환

사용자 정의 예외 InputNegativeException를 만든다고 가정했을 때 checked exception 예외로 정의하시오.

import java.util.InputMismatchException;
import java.util.Scanner;

public class Main {
    static Scanner scanner = new Scanner(System.in);
    public static void main(String[] args) {
        try {
            inputMoney(); // 호출부로 전달 했으므로 catch
            // InputMismatchException 는 Exception 상속한 unchecked 이므로 catch 하지 않으면 컴파일 에러

        } catch (InputMismatchException e) {
            e.printStackTrace();
        } // InputNegativeException 전환하지 않았다면 여기서 캐치해야함
    }

    // 예외 전환 코드
    public static int inputMoney() throws InputMismatchException { // 호출부로 전달 // 여러개 던질 수 있기 때문에 s
        int money = scanner.nextInt(); // 사용자에게 받은 금액이

        if (money < 0) { // 음수면 예외 발생
            try {
                throw new InputNegativeException("Money can't less than 0"); // 디폴트 메시지 말고 원하는 메시지 같이 전달
                // throw to catch block
            } catch (InputNegativeException e) {
                throw new InputMismatchException(e.getMessage()); // wrapping (전환)
            }
        }
        return money; // 음수 아니면 return
    }
}



2. 예외 복구

scanner.nextInt()를 통해 정수값을 입력받으려고 한다.
사용자가 잘못하여 알파벳이 들어간 문자열을 입력하면 오류가 발생하게 되는데 사용자가 정수값을 제대로 입력했을 때까지 입력을 다시 받는 예외 복구 코드를 구현하시오.

import java.util.InputMismatchException;
import java.util.Scanner;

public class NextIntException {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int input = 0;

        while (true) {
            try {
                System.out.print("정수 하나를 입력 하세요. : ");
                input = scanner.nextInt(); // 예외 발생 하면 catch 로 가고 발생하지 않으면 break
                break;
            } catch (InputMismatchException e) {
                scanner.nextLine(); // 위에서 사용자가 입력한 문자열 입력한 경우 버퍼에 남아있 -> 버퍼 지우기
                e.printStackTrace();
            }
        }

        System.out.println("input = " + input);
        scanner.close();
    }
}

0개의 댓글

관련 채용 정보