Try Catch(예외처리)

2 분 소요

안녕하세요 Legas 입니다. :)

이번 포스팅은 Try Catch 인 예외처리에 대해서 포스팅을 하도록 하겠습니다.

가끔 코드를 만들거나 문제를 풀다보면 내가 코딩한 코드들이 어딘가에 문제가되어
제대로 실행하지않고 오류가 나는것을 볼 수 있습니다.

그 상황은 오류(Error)는 아니고 예외(Exception)가 발생한 것 입니다.
예외가 발생한 이유는 여러가지로 예를들어 배열의 범위를 벗어난 인덱스에 접근할 때 등등 발생하게 됩니다.

저는 아직까지 프로그램을 만들 수 없지만 문제를 풀거나 공부한 내용으로 코드를 작성하면서 많이 보는 상황입니다.
예시

public class TryCatch {

    public static void main(String args[]){

        int[] x = {3, 4, 1, 5};
        System.out.println(x[4]);

    }
}

결과
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 4 out of bounds for length 4 예외발생에 보면 java.lang.ArrayIndexOutOfBoundsException 이라고 되어있습니다.
이 상황이 배열의 범위를 벗어난 인덱스에 접근했을때 발생하는 상황입니다.

보통적으로 예외처리가 발생하는 경우는

1. Exception

정의 : 어떤 일에 제외되는 대상이나 조건이 있을 때 쓰는 단어.

참조 나무위키 https://namu.wiki/w/%EC%98%88%EC%99%B8

개발언어에서는
프로그래밍 언어에서 명령을 실행할 시, 입력 값과 계산 대상의 자료형을 함수에서 지원하지 않거나, 함수에서 대상을 계산할 수 없을 때 나오는 오류. 라고 되어있습니다.

그래서 이런상황을 미리 예측하고 대처법을 만들기위한 코드가 Try Catch입니다.

예외처리의 코드 사용법은 아래와 같습니다.

public static void main(String args[]){

        try{ // 에러가 발생할 수 있는 코드
				
            int[] x = {3, 4, 1, 5};
            System.out.println(x[4]);
						
        }catch (Exception e){ // 에러시 실행할 코드
				
            System.out.println("Sorry can't find your index");
						
        }


    }

만약 위에서 System.out.println(x[0]); 으로 코드를 작성했다면 catch (Exception e)블록의 코드는 실행되지않고
Index[0]의 값인 3이 출력됩니다.

2. Try Catch 문제

Input에 N의 정수를 넣었을때 N개만큼 정수를 입력하고 해당 정수의 데이터타입을 출력하시오
정수의 데이터타입이 short, int, long 범위에 들어간다면
N can be fitted in: 데이터타입 정수의 범위에 들어가지 않는다면
N can’t be fitted anywhere. 으로 출력

Sample Input

5
-150
150000
1500000000
213333333333333333333333333333333333
-100000000000000

Sample Output

-150 can be fitted in:
* short
* int
* long
150000 can be fitted in:
* int
* long
1500000000 can be fitted in:
* int
* long
213333333333333333333333333333333333 can’t be fitted anywhere.
-100000000000000 can be fitted in:
* long

3. 풀이

  1. Input값을 받아야하기때문에 scanner 클래스 사용
  2. N의 숫자만큼 반복하여 입력해야하기 때문에 for문 사용
  3. 포스팅 처음에 정의했던 Try Catch코드 사용
여기를 눌러서 코드를 확인하세요
public static void main(String[] args){

        Scanner sc = new Scanner(System.in);
        int t=sc.nextInt();

        for(int i=0;i<t;i++)
        {

            try{
						
                long x=sc.nextLong();
                System.out.println(x+" can be fitted in:");
                if(x>=-128 && x<=127)System.out.println("* byte");
                if(x>=-Math.pow(2,15) && x<=Math.pow(2,15)-1) System.out.println("* short");
                if(x>=-Math.pow(2,31) && x<=Math.pow(2,31)-1) System.out.println("* int");
                if(x>=-Math.pow(2,63) && x<=Math.pow(2,63)-1) System.out.println("* long");
								
            }
            catch(Exception e){
						
                System.out.println(sc.next()+" can't be fitted anywhere.");
								
            }

        }

    }

결과

위의 결과처럼 원하는 Input값에 대해서는 허용하는 범위의 데이터값을 출력해주지만
허용하는 범위 밖의 데이터값에 대해서는 예외블록의 결과를 출력해줍니다.

댓글남기기