사용자 정의 예외 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
}
}
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();
}
}