메모장

예외 와 예외처리 본문

JAVA/개념정리

예외 와 예외처리

Itchild 2024. 4. 7. 20:34
728x90
반응형

 

[ 예외와 예외처리 ]

 

try{

실행시 예외가 발생할수도있는 코드

예외가 발생되면, "즉시" catch문으로 이동함!

 

결제코드(); // 1.잔액부족 2.한도초과 3.카드점검기간 4.카드단말기

}

catch(예외클래스 e){

해당 예외클래스의 문제가 발생되면

이곳의 코드를 수행

 

// 결제된 곳까지의 돈을 다시 되돌려놓기 == rollback

}

finally{

예외발생여부와 무관하게 항상 수행되는 코드

// 통신을 위해 확보해둔 모든 연결스트림 해제

}

 

try 잘 들어가는 항목 : 결제코드(); // 1. 잔액부족, 2. 한도초과

3. 카드점검기간 4. 카드단말기

 

catch

// 결제된 곳까지의 돈을 다시 되돌려놓기 == rollback

 

finally{

// 통신을 위해 확보해둔 모든 연결스트림 해제(뭔가 열어놨으면 나중엔 닫아야 한다)

}

 

★★★★★예외처리하면 좋은점 ★★★★★★

: 프로그램이 비정상적으로 종료되는것을 막을수 있음 !

: 예외가 발생되면서 커질수 있는 피해들을 최소화 하는것이 목표 !

 

▶ catch 는 여러 catch들을 겹쳐 쓸 수 있는데 자기가 맞는 에러 문장을 실행

 

public class Test01 {

	public static void main(String[] args) {

		int a =10;
		int b = 0; // 정수 / 정수 자체는 문제가 없음 !
		try {
		      System.out.println("확인1");
		      System.out.println(a/b); // 실행을 하려고보니까, 0이었던것!
		      // 코딩자체에는 문제가없으나,
		      // "실행시" 발생하는 문제 == 예외
		      System.out.println("확인2");
		   }
		   catch(ArithmeticException e) {
		      System.out.println("확인3");
		      System.out.println(a/1);
		      System.out.println("확인4");
		   }
		//if(예외가 발생했어 ?) {
		//System.out.println(a/b); // 실행을 하려고 보니까 , 0이었던것!
		//-> 그럼 1로 돌려줘 ,,
		
		// 코딩자체에는 문제가 없으나,
		// " 실행시 " 발생하는 문제  == 예외
		}
	}
 
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]); // 배열에 크기를 넘었다.
		}
		catch(ArrayIndexOutOfBoundsException e) {
			System.out.println("해당 인덱스는 없는 인덱스 입니다.");
		}
		finally { // 예외 발생여부와 무관하게 항상 수행된다 !!
			System.out.println("예외 발생여부와 무관하게 항상 수행되는 코드 ");
		}
	}
 

< 실습 문제 >

[ 문제 ]
정수를 입력 10개가 될때 까지 계속
입력한 정수들을 모두 출력 
[ 1, 3 ,-1, 0 , 10 ,....]
이중에서 0 이하인 정수들을 모두 제거
[1,3,10,...]
이중에서 가장 큰 정수가 저장된 인덱스 넘버 출력 
[2]번 
가장 큰 정수를 제외 하고 남은 정수들의 합과 평균 출력 
		  					

☆ 어떤 컬렉션을 사용 해야 할까 ? 중복 없이 라는 말이 없음, 인덱스 넘버.. ArrayList 사용 
한글 코딩시 어떤 제어문을 사용해야 할까 ?
사용자가 잘못된 입력을 하면 어떻게 해야 할까 ? try/catch
 
package class01;

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

public class Test05 {

	public static void main(String[] args) {
		ArrayList<Integer> data=new ArrayList<Integer>();
		Scanner sc=new Scanner(System.in);

		final int CNT=3; // 개수를 고정 시킬때
		while(data.size()<CNT){
			int num; // ★ SCOPE 이슈
			try {
				System.out.print("정수입력) ");
				num=sc.nextInt(); // 오류, 에러가 나는 부분 
			}
			catch(InputMismatchException e) {
				sc.nextLine();
				System.out.println("정수를 제대로 입력해주세요!");
				continue;
			}
			data.add(num);
		}
		System.out.println(data);

		int i=0;
		while(i<data.size()) { // 배열 크기 만큼
			if(data.get(i)<=0) { // 0이하의 수는 
				data.remove(i); // 제거한다
				continue;
			}
			i++;
		}
		System.out.println(data);

		int maxIndex=0; // 최대값 인덱스 번호
		int max=data.get(0); // 최대값
		for(i=1;i<data.size();i++) {
			if(data.get(i)>max) { // 인덱스번호의 값이 최대값보다 크다 ?
				max=data.get(i); // 최대값을 바꿔줘 
				maxIndex=i; // 최대값 인덱스 번호도 
			}
		}
		System.out.println("최대값= "+max);
		System.out.println("인덱스= "+maxIndex);
		data.remove(maxIndex); // 최대값 인덱스 번호를 삭제 해줘 

		int sum=0; // 합계 구하기 
		for(int v:data) {
			sum+=v;
		}
		double avg=sum*1.0/data.size(); // 평균 공식 써주기 
		System.out.println("총합= "+sum);
		System.out.println("평균= "+avg);
	}
   }
  }
}
 

 

 

728x90
반응형

'JAVA > 개념정리' 카테고리의 다른 글

MVC 패턴  (0) 2024.04.07
스레드(Thread) 와 파일 입출력  (1) 2024.04.07
컬렉션 프레임 워크  (0) 2024.04.06
객체배열  (1) 2024.04.06
(접근)제어자  (1) 2024.04.06