Try Catch(예외처리)
안녕하세요 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
정의 : 어떤 일에 제외되는 대상이나 조건이 있을 때 쓰는 단어.
개발언어에서는
프로그래밍 언어에서 명령을 실행할 시, 입력 값과 계산 대상의 자료형을 함수에서 지원하지 않거나,
함수에서 대상을 계산할 수 없을 때 나오는 오류.
라고 되어있습니다.
그래서 이런상황을 미리 예측하고 대처법을 만들기위한 코드가 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. 풀이
- Input값을 받아야하기때문에 scanner 클래스 사용
- N의 숫자만큼 반복하여 입력해야하기 때문에 for문 사용
- 포스팅 처음에 정의했던 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값에 대해서는 허용하는 범위의 데이터값을 출력해주지만
허용하는 범위 밖의 데이터값에 대해서는 예외블록의 결과를 출력해줍니다.
댓글남기기