ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 14일 차 예외처리 실습예제
    삼성SDS_멀티캠퍼스/Java 2015. 9. 25. 09:06
    반응형

    1. 0으로 나누었을때에 대한 예외처리 만들기

    class DivideByZeroException extends ArithmeticException {
     public DivideByZeroException(){
      super("0으로 나눌수 없음.");
     }
    }

    public class Test {
     public static void main(String[] agrs) {
      double result;
      try{
       result = quotient(1, 0);
      }
      catch (DivideByZeroException e){
       System.out.println(e.toString());
      }
     }
     public static double quotient (int n, int d) throws DivideByZeroException{
      if (d == 0)
       throw new DivideByZeroException();
      return (double)n/d;
     }

    2. 제품 코드를 입력받아 같은 형태의 입력인지 확인하여 다른 경우 예외처리.

     


    import java.util.regex.Matcher;
    import java.util.regex.Pattern;

    class IncorrectCodeException extends Exception{
     public IncorrectCodeException(){
      super("유효하지 않은 제품코드입니다.");
     }
    }
    public class TestEx {
     public static void main(String[] args){
      Scanner scan = new Scanner(System.in);
      System.out.println("제품 코드를 입력하세요 ex) MD0324");
      String s = scan.nextLine();
      try{
       checkCode(s);
       System.out.println("올바른 제품코드입니다.");
      }catch(IncorrectCodeException e){
       System.out.println(e.toString());   
      }
      
      
     }
     public static void checkCode (String code) throws IncorrectCodeException{
      
      Pattern pattern = Pattern.compile("[A-Z][A-Z][0-9][0-9][0-9][0-9]");

      Matcher matcher = pattern.matcher(code);

      if(!matcher.matches())
       throw new IncorrectCodeException();

    /*

    //교재 518페이지.
      boolean result = Pattern.matches("[A-Z][A-Z][0-9][0-9][0-9][0-9]", code);
      if(!result)
       throw new IncorrectCodeException();  

    */
     }
     

     

     public static void checkCode  메소드를 아래와 같이 변경할수 있다.

     public static void checkCode (String code) throws IncorrectCodeException{
      if (code.length()!=6)
       throw new IncorrectCodeException();
      for (int i=0; i<6;i++){
       if(i<2){
        if(code.charAt(i)<'A'||code.charAt(i)>'Z')
         throw new IncorrectCodeException();
       }
       else{
        if(code.charAt(i)<'0'||code.charAt(i)>'9')
         throw new IncorrectCodeException();
       }
      }
     }

     

    3. 배열에 저장된 숫자중에 사용자가 입력한 숫자와 비교하여 같은 숫자가 없으면 예외처리.

     

     import java.util.Scanner;

    class NotFoundException extends Exception {
     public NotFoundException() {
      super("숫자를 찾을수가 없습니다.");
     }
    }

    public class Test2 {
     public static void main(String[] args) {
      int[] arr = { 0, 1, 2, 3, 4, 5 };
      Scanner scan = new Scanner(System.in);

      System.out.println("찾을 숫자 입력");
      int find = scan.nextInt();
      try {
       searchArray(find, arr);
       System.out.println("숫자 찾음");
      } catch (NotFoundException e) {
       System.out.println(e.toString());
      }

     }

     public static void searchArray(int find, int[] arr) throws NotFoundException {
      for (int i : arr) {
       if( i == find )
        return;
      }
      throw new NotFoundException();
     }
    }

    4. 은행 예금을 나타내는 잔액(balance)를 필드로 갖는 클래스를 작성후, 입출, 출금 기능을 넣어 인출 금액이 잔액보다 많으면 예외처리.

     

     

    class NegativeBalanceException extends RuntimeException {
     public NegativeBalanceException() {
      super("인출금이 잔액보다 많습니다.");
     }
    }

    class BankAccount {
     private int balance;

     public BankAccount(int money) {
      balance = money;
     }

     public int getBalance() {
      return balance;
     }

     public void setBalance(int balance) {
      this.balance = balance;
     }

     public void deposit(int money) {
      balance += money;
     }

     public void withdraw(int money) throws NegativeBalanceException {
      if (money > balance)
       throw new NegativeBalanceException();
      else
       balance -= money;
     }
    }

    public class Test3 {
     public static void main(String[] args) {
      BankAccount bank = new BankAccount(30000);
      int input = 0;
      Scanner scan = new Scanner(System.in);
      while (true) {
       System.out.println("1. 예금, 2. 출금, 5. 종료");
       input = scan.nextInt();
       if (input == 5)
        break;
       else if (input == 1) {
        System.out.println("현재잔액 : "+bank.getBalance());
        System.out.println("입금할 금액 : ");
        int money = scan.nextInt();
        bank.deposit(money);
       } else if (input == 2) {
        System.out.println("현재잔액 : "+bank.getBalance());
        System.out.println("출금할 금액 : ");
        int money = scan.nextInt();
        try {
         bank.withdraw(money);

        } catch (NegativeBalanceException e) {
         // TODO: handle exception
         System.out.println(e.toString());
        }
       }
      }
     }

     



    출처 : http://justbaik.tistory.com/30

    반응형

    '삼성SDS_멀티캠퍼스 > Java' 카테고리의 다른 글

    15일 차 제네릭메소드  (0) 2015.09.25
    14일 차 정규표현식  (0) 2015.09.25
    14일 차 예외의 종류  (0) 2015.09.25
    14일 차 Try - catch 문 (예외처리)  (0) 2015.09.25
    13일 차 문자열 잘라내기  (0) 2015.09.23
Designed by Tistory.