public class Calc {
	// 예외 호출지역 부분으로 전달.
	// 예외 처리를 지정된 지역으로 전달해야 작동하는 라이브러리들도 있기 때문에 사용.
	public static int div(int a, int b) throws Exception{
		return a/b;
	}
	
}
import java.util.Scanner;

/*
 * 예외 ( exception )
 * → 잘못된 코드 또는 사용자의 잘못된 조작으로 인해 발생하는 프로그램 오류.
 * 
 * 예외처리
 * → 프로그램에서 오류가 발생했을 때, 문제 내용을 처리.
 *   Ex) try {
 *   
 *           문제가 발생할 수 있는 지역.
 *           
 *       } catch ( 예외 타입 ) {
 *       	 예외처리 지역
 *       	 > catch 의 예외 타입으로 기본자료형 사용불가.
 *       } finally {
 *           예외처리와 상관없이 무조건 실행. (사용 O,X)
 *       } 
 */

public class Ex01Exception {
	
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		int candy = 0;
		int people = 0;
		try {
			System.out.print("사탕 수 입력 > ");
			candy = sc.nextInt();
			System.out.print("사람 수 입력 > ");
			people = sc.nextInt();
			
			int div = candy / people;
			int mod = candy % people;
			
			System.out.println("한 사람당 사탕 수 : "+ div);
			System.out.println("남은 사탕 수 : " + mod);
		} catch(Exception e) {
			//System.out.println("0으로 나누기 불가능 ");
			//e.printStackTrace(); //→ error 코드 자세히
			//System.out.println(e.toString()); //→ error 코드 
			System.err.println(e.getMessage()); // → error 코드 더 간단한 내용 
		} finally {
			System.out.println("- 계산 종료 -");
		}
	}
}
public class Ex02Exception {
	
	public static void main(String[] args) {
		
		String[] sa = new String[] {"1","2","3"};
		int[] ia = new int[sa.length];
		
		try {
			for(int i=0;i<4;i++) {
				ia[i] = Integer.parseInt(sa[i]);
				System.out.print(ia[i] + " ");
			}
			System.out.println();
		} catch(NumberFormatException e) {
			e.printStackTrace();
			System.out.println("- NumberFormatException -");
		} catch(ArrayIndexOutOfBoundsException e) { 
			e.printStackTrace();
			System.out.println("- ArrayIndexOutOfBoundsException -");
		} catch(Exception e) {
			e.printStackTrace();
			System.out.println("- Exception e -");
		} 
		
		
	}
}
import java.util.Scanner;

public class Ex03Exception {
	
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		int candy = 0;
		int people = 0;
		try {
			System.out.print("사탕 수 입력 > ");
			candy = sc.nextInt();
			System.out.print("사람 수 입력 > ");
			people = sc.nextInt();
			
			if(people < 1)
				throw new Exception("1 미만의 값 사용불가..\\n");
			
			int div = candy / people;
			int mod = candy % people;
			
			System.out.println("한 사람당 사탕 수 : "+ div);
			System.out.println("남은 사탕 수 : " + mod);
		} catch(Exception e) {
			//System.out.println("0으로 나누기 불가능 ");
			//e.printStackTrace(); //→ error 코드 자세히
			//System.out.println(e.toString()); //→ error 코드 
			System.err.println(e.getMessage()); // → error 코드 더 간단한 내용 
		} finally {
			System.out.println("- 계산 종료 -");
		}
		
	}
	
}
public class Ex04Exception {

	public static void main(String[] args) {
		
		try {
			
			int res = Calc.div(10, 0);
			System.out.println("res : " + res);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
}
import java.util.Scanner;

public class QuizException {

		public static void main(String[] args) {
			
			// 사용자에게 ID를 입력받습니다.
			// 정상이면 사용 가능하고, 문제가 있으면 재입력 받아서 합니다.
			// → ID 는 2~10 글자 사이만 가능.
			//	 ID 에 'admin' 단어가 들어가 있으면 입력불가.
			
			Scanner sc = new Scanner(System.in);
			while(true) {
				try {
						System.out.print(" ID 입력 > ");
						String id = sc.next();
						if(id.length()<2 | id.length()>10) {
							throw new Exception("ID는 2~10글자 사이만 가능.");
						} else if(id.contains("admin")) {
							throw new Exception("ID에 'admin' 단어가 들어가 있으면 안됩니다.");
						} else {
							System.out.println("ID : " + id);
							break;
						}
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
			
		}
}