프로그래밍

[자바 기초] day13 : 예외와 예외처리 본문

자바/자바 기초

[자바 기초] day13 : 예외와 예외처리

시케 2023. 5. 19. 17:37
728x90
반응형

2023.05.19.금

예외와 예외처리

코드 자체는 문제가 없지만 실행시 발생하는 문제이다

 

선언 방법

try {
	// 실행시 예외가 발생 가능한 코드
	// 예외 발생 시 즉시 catch문으로 이동(return과 유사)
	// ex. 결제코드
			
}
catch(예외클래스 e) {
	//해당 예외클래스 문제 발생시
	// 이곳의 코드 수행
	// ex. 결제된 곳까지의 돈을 다시 되돌려놓기 == rollback
}
finally{
	//예외발생여부 무관하게 수행되는 코드
	// ex. 통신을 위해 확보해둔 연결스트림 해제
}

 

예외처리의 장점

  1. 비정상적 종료를 막을 수 있다
  2. 예외가 발생되면서 발생될 수 있는 피해들을 최소화할 수 있다

예외 클래스는 자바의 util에 존재하기 때문에 import가 필요하다

 

예제

package class01;

// [예외와 예외처리]

public class Test01 {

	public static void main(String[] args) {
		int a=10;
		int b=0; // 정수/정수 자체는 문제없음 >실행하려고 보니까 0
		

		try {
		System.out.println(a/b);
			
		}
		catch(ArithmeticException e) {
			System.out.println(a/1);
		}
	}

}

예제2)

package class01;

public class Test02 {

	public static void main(String[] args) {
		int data[] = new int[3];
		for(int i =0; i<3; i++) {
			data[i] = i+1;
		}

		try {
			System.out.println(data[3]/data[0]);
		}
		catch(ArithmeticException e){
			System.out.println("0으로는 나눌 수 없습니다");
		}
		catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("해당 인덱스는 없는 인덱스입니다");
		}
		finally {
			System.out.println("예외발생여부 무관하게 수행되는 코드");
		}
	}

}

예외

package class01;

import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Scanner;

public class Test04 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		// int 타입만 저장 가능
		ArrayList<Integer> data = new ArrayList<>();

		// 정상적입력 10번
		final int CNT =10;
		while (data.size() < CNT) {
			int num;
			try {
				System.out.print("정수 입력: ");
				num = sc.nextInt();
				System.out.println("입력한 수: " + num);

			} catch (InputMismatchException e) { // 얘네도 클래스 자바의 util에 존재 (임포트 필요)
				sc.nextLine();// 버퍼에 남아있는 쓰레기 값 제거 코드
				System.out.println("정수만 입력해주세요");
				continue;
			}
			data.add(num);
		}

		// 입력한 정수들 출력
		System.out.println(data);

		// 0 이하 제거
		int index = 0;
		while (index < data.size()) {
			if (data.get(index) <= 0) {
				data.remove(index);
				continue;
			}

			index++;
		}

		// 0 제거한 data 값 출력
		System.out.println(data);

		
		// 최대값 찾기, sum 구하기
		int max = data.get(0);
		int sum = 0;

		int i =0;
		index =0;
		for (i = 0; i<data.size(); i++) {
			if (data.get(i) > max) {
				max = data.get(i);
				index = i;
			}
			sum+=data.get(i);
		}
		
		System.out.println("가장 큰 정수가 입력된 인덱스: ["+index+"]번");
		sum -=max; // 총 합에서 최대값 제거
		
		double avg = (sum*1.0)/(data.size()-1); // 최대값 제거했기 때문에 개수-1
		
		System.out.println("합: "+sum+" 평균: "+avg);
		
		
		
	}

}

 

728x90
반응형
Comments