명품 JAVA Programming.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

Ⅰ. 연산자 Ⅱ. 제어 구조. 연산자 : 할당 연산자 - 사용자가 정의한 변수에 임의의 값을 저장하는 기능 strvar = strVar1+ “ Hello ”
Chapter 12. 배열. 배열  동일한 항목들이 동일한 크기로 연속적으로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조.
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
제 3 장 반복문, 배열, 예외처리 1 명품 JAVA Programming. for( 초기문 ; 조건식 ; 반 복후작업 ) {.. 작업문.. }  for 키 워드    for 문의 구성 초기문 조건 식 작업문 반복 후작업 true false for 문이 실행한.
명품 JAVA Programming 제 3 장 반복문, 배열, 예외처리.
어서와 Java는 처음이지! 제3장선택과 반복.
10. 예외 처리.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
IntArray[0] int length 5 intArray 객체 제 3 장 반복문, 배열, 예외처리.
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
명품 JAVA Essential.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
Chapter 7. 조건문.
10장 예외 Lab 10-1.
Lesson 3. 입출력과 제어문.
7장 배열 ②.
5장 배열 작성자 : 변재현.
Lesson 5. 레퍼런스 데이터형.
Lesson 9. 예외처리.
Lesson 6. 형변환.
어서와 Java는 처음이지! 제3장선택과 반복.
명품 Java Programming.
5장. 참조 타입.
6 반복문의 기본 for 문 여러 번 반복하는 작업은 for 문으로!.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
14. 예외처리.
10장. 예외처리.
11장. 1차원 배열.
C#.
13. 연산자 오버로딩.
3. while문 반복문의 종류 while 문 while( 조건식 )        문장;.
쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express Slide 1 (of 27)
C 프로그래밍 C언어 (CSE2035) (Chap11. Derived types-enumerated, structure, and union) (1-1) Sungwook Kim Sogang University Seoul, Korea Tel:
JA A V W. 03.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
프로그래밍 개요
어서와 C언어는 처음이지 제14장.
박성진 컴퓨터 프로그래밍 기초 [09] 배열 part 1 박성진
Lesson 4. 수식과 연산자.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
2장. 변수와 타입.
자바 5.0 프로그래밍.
김선균 컴퓨터 프로그래밍 기초 - 7th : 함수 - 김선균
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
5장 선택제어문 if 선택문 switch-case 선택문 다양한 프로그램 작성 조건 연산자.
Chapter 08. 함수.
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
C++ Espresso 제11장 예외 처리와 형변환.
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
함수(Function) ◈ 함수의 개념 및 사용 이유 ◈ 함수 정의, 호출 및 선언 ◈ 지역변수와 전역변수 ◈ return 문
[ 단원 04 ] 반복과 배열.
2nd day Indexing and Slicing
데이터 동적 할당 Collection class.
Flow Diagram IV While.
7주차: Functions and Arrays
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
7장. 다양한 형태의 반복문. 7장. 다양한 형태의 반복문 7-1 반복문이란? 반복문의 기능 세 가지 형태의 반복문 특정 영역을 특정 조건이 만족하는 동안에 반복 실행하기 위한 문장 7-1 반복문이란? 반복문의 기능 특정 영역을 특정 조건이 만족하는 동안에 반복.
11장 배열 1. 배열이란? 1.1 배열의 개요 1.2 배열의 선언과 사용.
Java Chapter 1 ~ 주차.
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
어서와 C언어는 처음이지 제21장.
6 객체.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

명품 JAVA Programming

반복문의 특징 자바 반복문의 종류 for 문 while 문 do while 문

for 문의 구성 for(i=0; i<10; i++) { // i가 0~9까지 10번 반복 System.out.print(i); // 0에서 9까지 출력 }

for 문의 실행 과정을 나타내는 순서도

for문의 예시 0에서 9까지 정수 출력 반복문에 변수 선언 가능 0에서 100까지의 합 구하기 int i; for(i = 0; i < 10; i++) { System.out.print(i); } int i; for(i = 0; i < 10; i++) System.out.print(i); 반복문에 변수 선언 가능 for(int i = 0; i < 10; i++) // 변수 i는 for문을 벗어나서 사용할 수 없음 System.out.print(i); 0에서 100까지의 합 구하기 int sum = 0; for(int i = 0; i <= 100; i++) sum += i; int i, sum; for(i = 0, sum=0; i <= 100; i++) sum += i; int sum = 0; for(int i = 100; i >= 0; i--) sum += i;

for문의 특이한 형태 for(초기작업; true; 반복후작업) { // 반복 조건이 true이면 무한 반복 ............ } for(초기작업; ; 반복후작업) { // 반복조건이 비어 있으면 true로 간주, 무한 반복 ............ } // 초기 작업과 반복후작업은 ‘,’로 분리하여 여러 문장 나열 가능 for(i=0; i<10; i++, System.out.println(i)) { ......................... } // for문 내에 변수 선언 for(int i=0; i<10; i++) { // 변수 i는 for문 내에서만 사용 가능 ............ }

예제 3-1 : for 문을 이용하여 1부터 10까지 합 출력 public class ForSample { public static void main(String[] args) { int sum=0; for(int i=1; i<=10; i++) { // 1~10까지 반복 sum += i; System.out.print(i); // 더하는 수 출력 if(i<=9) // 1~9까지는 '+' 출력 System.out.print("+"); else { // i가 10인 경우 System.out.print("="); // '=' 출력하고 System.out.print(sum); // 덧셈 결과 출력 } 1+2+3+4+5+6+7+8+9+10=55

while 문의 구성 반복 조건이 true이면 반복, false이면 반복 종료 반복 조건이 없으면 컴파일 오류 처음부터 반복조건을 통과한 후 작업문 수행

while문의 실행 과정을 나타내는 순서도

예제 3-2 : -1이 입력될 때까지 입력된 수의 평균 구하기 while문을 이용하여 정수를 여러 개 입력 받고 평균을 출력하라. -1이 입력되면 입력을 종료한다. import java.util.Scanner; public class WhileSample { public static void main(String[] args) { int count=0; // count는 입력된 정수의 개수 int sum=0; // sum은 합 Scanner scanner = new Scanner(System.in); System.out.println("정수를 입력하고 마지막에 -1을 입력하세요."); int n = scanner.nextInt(); // 정수 입력 while(n != -1) { // -1이 입력되면 while 문 벗어남 sum += n; count++; n = scanner.nextInt(); // 정수 입력 } if(count == 0) System.out.println("입력된 수가 없습니다."); else { System.out.print("정수의 개수는 " + count + "개이며 "); System.out.println("평균은 " + (double)sum/count + "입니다."); scanner.close(); 정수를 입력하고 마지막에 -1을 입력하세요. 10 30 –20 40 -1 정수의 개수는 4개이며 평균은 15.0입니다. -1은 마지막 입력을 뜻함

do-while 문의 구성 무조건 최소 한번 작업문 실행 반복 조건이 true이면 반복, false이면 반복 종료 반복 조건이 없으며 컴파일 오류

do-while문의 실행 과정을 나타내는 순서도

예제 3-3 : a-z까지 출력 abcdefghijklmnopqrstuvwxyz do-while 문을 이용하여 'a'부터 'z'까지 출력하는 프로그램을 작성하시오. public class DoWhileSample { public static void main (String[] args) { char c = 'a'; do { System.out.print(c); c = (char) (c + 1); } while (c <= 'z'); } abcdefghijklmnopqrstuvwxyz

10000명의 학생이 있는 100개 대학의 모든 학생 성적의 합을 구할 때, 중첩 반복 중첩 반복 반복문이 다른 반복문을 내포하는 구조 이론적으로는 몇 번이고 중첩 반복 가능 너무 많은 중첩 반복은 프로그램 구조를 복잡하게 하므로 2중 또는 3 중 반복이 적당 for(int i=0; i<100; i++) { // 100개의 학교 성적을 모두 더한다. ..... } for(int j=0; j<10000; j++) { // 10000명의 학생 성적을 모두 더한다. ..... } 10000명의 학생이 있는 100개 대학의 모든 학생 성적의 합을 구할 때, for 문을 이용한 이중 중첩 구조

예제 3-4 : 2중 중첩을 이용한 구구단 2중 중첩 for문을 사용하여 구구단을 출력하는 프로그램을 작성하시오. 한 줄에 한 단씩 출력한다. public class NestedLoop { public static void main(String[] args) { for(int i=1; i<10; i++) { // 1단에서 9단 for(int j=1; j<10; j++) { // 각 단의 구구셈 출력 System.out.print(i + "*" + j + "=" + i*j); // 구구셈 출력 System.out.print('\t'); // 하나씩 탭으로 띄기 } System.out.println(); // 한 단이 끝나면 다음 줄로 커서 이동 1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9 2*1=2 2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18 3*1=3 3*2=6 3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27 4*1=4 4*2=8 4*3=12 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45 6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 6*7=42 6*8=48 6*9=54 7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 7*8=56 7*9=63 8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 8*9=72 9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81

continue문 continue 문 반복문을 빠져 나가지 않으면서 다음 반복으로 진행 분기 조건식으로분기 조건식으로분기

예제 3-5 : continue 문을 이용하여 양수 합 구하기 5개의 정수를 입력 받고 그 중 양수들만 합하여 출력하는 프로그램을 작성하라. import java.util.Scanner; public class ContinueExample { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("정수를 5개 입력하세요."); int sum=0; for(int i=0; i<5; i++) { int n = scanner.nextInt(); // 키보드에서 정수 입력 if(n<=0) continue; // 양수가 아닌 경우 다음 반복으로 진행 else sum += n; // 양수인 경우 덧셈 } System.out.println("양수의 합은 " + sum); scanner.close(); 정수를 5개 입력하세요. 5 -2 6 10 -4 양수의 합은 21

break문 break 문 반복문 하나를 완전히 빠져 나갈 때 사용 하나의 반복문만 벗어남

예제 3-6 : break 문을 이용하여 while 문 벗어나기 "exit"이 입력되면 while 문을 벗어나도록 break 문을 활용하는 프로그램을 작성하라. import java.util.Scanner; public class BreakExample { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("exit을 입력하면 종료합니다."); while(true) { System.out.print(">>"); String text = scanner.nextLine(); if(text.equals("exit")) // "exit"이 입력되면 반복 종료 break; // while 문을 벗어남 } System.out.println("종료합니다...");   scanner.close(); 문자열 비교 시 equals()사용 exit을 입력하면 종료합니다. >>edit >>exit 종료합니다...

배열이란? 배열(array) 인덱스와 인덱스에 대응하는 데이터들로 이루어진 자료 구조 같은 타입의 데이터들이 순차적으로 저장 배열을 이용하면 한 번에 많은 메모리 공간 할당 가능 같은 타입의 데이터들이 순차적으로 저장 인덱스를 이용하여 원소 데이터 접근 반복문을 이용하여 처리하기에 적합 배열 인덱스 0부터 시작 인덱스는 배열의 시작 위치에서부터 데이터가 있는 상대 위치

자바 배열의 필요성과 모양

일차원 배열 만들기 배열 선언과 배열 생성의 두 단계 필요 배열 선언 배열 생성 선언과 함께 초기화 잘못된 배열 선언 배열 선언 시 값 초기화 잘못된 배열 선언 int intArray[]; char charArray[]; int[] intArray; char[] charArray; 또는 intArray = new int[10]; charArray = new char[20]; int intArray[] = new int[10]; char charArray[] = new char[20]; 또는 int intArray[] = {0,1,2,3,4,5,6,7,8,9}; // 초기화된 값의 개수(10)만큼의 배열 생성 int intArray[10]; // 컴파일 오류. 배열의 크기를 지정하면 안됨

레퍼런스 변수와 배열

배열을 초기화하면서 생성한 결과

배열 인덱스와 원소 접근 배열 원소 접근 배열 변수명과 [] 사이에 원소의 인덱스를 적어 접근 인덱스의 범위 배열의 인덱스는 0부터 시작 배열의 마지막 항목의 인덱스는 (배열 크기 – 1) 인덱스의 범위 반드시 배열 생성 후 접근 int intArray [] = new int[5]; // 원소가 5개인 배열 생성. 인덱스는 0~4까지 가능 intArray[0] = 5; // 원소 0에 5 저장 intArray[3] = 6; // 원소 3에 6 저장 int n = intArray[3]; // 원소 3의 값을 읽어 n에 저장. n은 6이 됨 n = intArray[-2]; // 실행 오류. 인덱스로 음수 사용 불가 n = intArray[5]; // 실행 오류. 5는 인덱스의 범위(0~4)를 넘었음 int intArray []; intArray[1] = 8; // 오류, 생성 되지 않은 배열 사용

레퍼런스 치환과 배열 공유 하나의 배열을 다수의 레퍼런스가 참조 가능

예제 3-7 : 배열에 입력받은 수 중 제일큰수 찾기 양수 5개를 입력 받아 배열에 저장하고, 제일 큰 수를 출력하는 프로그램을 작성하라. import java.util.Scanner; public class ArrayAccess { public static void main(String[] args) { Scanner scanner = new Scanner(System.in);   int intArray[] = new int[5]; // 배열 생성 int max=0; // 현재 가장 큰 수 System.out.println("양수 5개를 입력하세요."); for(int i=0; i<5; i++) { intArray[i] = scanner.nextInt(); // 입력받은 정수를 배열에 저장 if(intArray[i] >max) // intArray[i]가 현재 가장 큰 수보다 크면 max = intArray[i]; // intArray[i]를 max로 변경 } System.out.print("가장 큰 수는 " + max + "입니다."); scanner.close(); 양수 5개를 입력하세요. 1 39 78 100 99 가장 큰 수는 100입니다.

배열의 크기, length 필드 배열은 자바에서 객체로 관리 배열 객체 내에 length 필드는 배열의 크기를 나타냄

예제 3-8 : 배열 원소의 평균 구하기 배열의 length 필드를 이용하여 배열 크기만큼 정수를 입력 받고 평균을 구하는 프로그램을 작성하라. import java.util.Scanner; public class ArrayLength { public static void main(String[] args) { int intArray[] = new int[5]; // 배열의 선언과 생성 int sum=0; Scanner scanner = new Scanner(System.in); System.out.print(intArray.length + "개의 정수를 입력하세요>>"); for(int i=0; i<intArray.length; i++) intArray[i] = scanner.nextInt(); // 키보드에서 입력받은 정수 저장 sum += intArray[i]; // 배열에 저장된 정수 값을 더하기 System.out.print("평균은 " + (double)sum/intArray.length); scanner.close(); } 5개의 정수를 입력하세요>> 2 3 4 5 9 평균은 4.6

배열과 for-each 문 for-each 문 배열이나 나열(enumeration)의 각 원소를 순차적으로 접근하는데 유용한 for 문 int[] num = { 1,2,3,4,5 }; int sum = 0; for (int k : num) // 반복될 때마다 k는 num[0], num[1], ..., num[4] 값으로 설정 sum += k; System.out.println("합은 " + sum); 합은 15 String names[] = { "사과", "배", "바나나", "체리", "딸기", "포도" } ; for (String s : names) // 반복할 때마다 s는 names[0], names[1], ..., names[5] 로 설정 System.out.print(s + " "); 사과 배 바나나 체리 딸기 포도 enum Week { 월, 화, 수, 목, 금, 토, 일 } for (Week day : Week.values()) // 반복될 때마다 day는 월, 화, 수, 목, 금, 토, 일로 설정 System.out.print(day + "요일 "); 월요일 화요일 수요일 목요일 금요일 토요일 일요일

예제 3-9 : for-each 문 활용 for-each 문을 활용하는 사례를 보자. public class foreachEx { enum Week { 월, 화, 수, 목, 금, 토, 일 } public static void main(String[] args) { int [] n = { 1,2,3,4,5 }; String names[] = { "사과", "배", "바나나", "체리", "딸기", "포도" } ; int sum = 0; // 아래 for-each에서 k는 n[0], n[1], ..., n[4]로 반복 for (int k : n) { System.out.print(k + " "); // 반복되는 k 값 출력 sum += k; } System.out.println("합은" + sum); // 아래 for-each에서 s는 names[0], names[1], ..., names[5]로 반복 for (String s : names) System.out.print(s + " "); System.out.println(); // 아래 for-each에서 day는 월, 화, 수, 목, 금, 토, 일 값으로 반복 for (Week day : Week.values()) System.out.print(day + "요일 "); for-each 문을 활용하는 사례를 보자. 1 2 3 4 5 합은 15 사과 배 바나나 체리 딸기 포도 월요일 화요일 수요일 목요일 금요일 토요일 일요일

메소드에서 배열 리턴 메소드의 배열 리턴 배열의 레퍼런스 리턴 메소드의 리턴 타입 메소드의 리턴 타입과 리턴 받는 배열 타입과 일치 리턴 타입에 배열의 크기를 지정하지 않음 int [] intArray; intArray = makeArray();

배열 리턴 과정

예제 3-12 : 배열 리턴 정수 4개를 가지는 일차원 배열을 생성하고 1,2,3,4로 초기화한 다음, 배열을 리턴하는 makeArray()를 작성하고, 이 메소드로부터 배열을 전달받아 값을 출력하는 프로그램을 작성하라. public class ReturnArray { static int[] makeArray() { // 정수형 배열을 리턴하는 메소드 int temp[] = new int[4]; // 배열 생성 for (int i=0; i<temp.length; i++) temp[i] = i; // 배열의 원소를 0, 1, 2, 3으로 초기화 return temp; // 배열 리턴 } public static void main (String[] args) { int intArray[]; // 배열 레퍼런스 변수 선언 intArray = makeArray(); // 메소드로부터 배열 전달받음 for (int i=0; i<intArray.length; i++) System.out.print(intArray[i] + " "); // 배열 모든 원소 출력 0 1 2 3

main() 메소드 main()은 자바 응용프로그램의 실행 시작 메소드 main()의 원형 반드시 static 반드시 public 반드시 void 반드시 매개 변수 타입은 문자열 배열

main(string [] args) 메소드의 인자 전달

이클립스에서 main() 메소드의 인자전달 Run 메뉴의 Run Configurations 항목에서 main() 메소드의 인자 나열

예제 3-13 : main()에서 명령행 인자의 합 계산 public class Calc { public static void main (String[] args) { double sum = 0.0; for (int i=0; i<args.length; i++) // 인자 개수만큼 반복 sum += Double.parseDouble(args[i]); // 문자열을 실수(double 타입)로 변환하여 합산 System.out.println("합계 :" + sum); } Double.parseDouble()는 매개변수로 주어진 문자열을 실수로 변환. Double.parseDouble(“20.5") 은 실수 20.5 리턴 명령행 인자 2 20.5 88.1을 모두 합하여 110.6 출력

자바의 예외 처리 컴파일 오류 예외(Exception) 문법에 맞지 않게 작성된 코드 컴파일할 때 발견 오동작이나 결과에 악영향을 미칠 수 있는 실행 중 발생한 오류 정수를 0으로 나누는 경우 배열보다 큰 인덱스로 배열의 원소를 접근하는 경우 존재하지 않는 파일을 읽으려고 하는 경우 정수 입력을 기다리는 코드가 실행되고 있을 때, 문자가 입력된 경우 자바에서 예외 처리 가능 예외 발생 -> 자바 플랫폼 인지 -> 응용프로그램에서 전달 응용프로그램이 예외를 처리하지 않으면, 응용프로그램 강제 종료

예제 3-14 : 0으로 나누기 예외 발생으로 프로그램이 강제 종료되는 경우 두 정수를 입력 받아 나눗셈을 하고 몫을 구하는 프로그램 코드이다. 사용자가 나누는 수에 0 을 입력하면 ArithmeticException 예외가 발생하여 프로그램이 강제 종료된다. import java.util.Scanner; public class DivideByZero { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int dividend; // 나뉨수 int divisor; // 나눗수 System.out.print("나뉨수를 입력하시오:"); dividend = scanner.nextInt(); // 나뉨수 입력 System.out.print("나눗수를 입력하시오:"); divisor = scanner.nextInt(); // 나눗수 입력 System.out.println(dividend+"를 "+ divisor + "로 나누면 몫은 " + dividend/divisor + "입니다."); scanner.close(); } divisor가 0이므로 예외 발생 나뉨수를 입력하시오:100 나눗수를 입력하시오:0 Exception in thread "main" java.lang.ArithmeticException: / by zero at DivideByZero.main(ExceptionExample1.java:14)

예외 처리, try-catch-finally 문 예외가 발생할 때 대응하는 응용프로그램 코드 try-catch-finally 문 사용 finally 블록은 생략 가능 try { 예외가 발생할 가능성이 있는 실행문(try 블록) } catch (처리할 예외 타입 선언) { 예외 처리문(catch 블록) finally { 예외 발생 여부와 상관없이 무조건 실행되는 문장(finally 블록) 생략 가능

예외에 따른 제어의 흐름 try블록에서 예외가 발생하지 않은 정상적인 경우 try블록에서 예외가 발생한 경우 try { .... 실행문 } catch (처리할 예외 타입 선언) { 예외 처리문 finally { finally 블록 문 try { .... 실행문 } catch (처리할 예외 타입 선언) { 예외 처리문 finally { finally 블록 문 에외발생

자바의 예외 클래스 자주 발생하는 예외

예제 3-15 : 0으로 나눌 때 발생하는 ArithmeticException 예외 처리 try-catch 블록을 이용하여 예제 3-14를 수정하여, 정수를 0으로 나누는 경우에 "0으로 나눌 수 없습니다!"를 출력하고 다시 입력 받는 프로그램을 작성하라. import java.util.Scanner; public class DevideByZeroHandling { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while(true) { System.out.print("나뉨수를 입력하시오:"); int dividend = scanner.nextInt(); // 나뉨수 입력 System.out.print("나눗수를 입력하시오:"); int divisor = scanner.nextInt(); // 나눗수 입력 try { System.out.println(dividend + "를 "+ divisor + "로 나누면 몫은 “ + dividend/divisor + "입니다."); break; // 정상적인 나누기 완료 후 while 벗어나기 } catch(ArithmeticException e) { // ArithmeticException 예외 처리 코드 System.out.println("0으로 나눌 수 없습니다! 다시 입력하세요"); scanner.close(); ArithmeticException 예외 발생 나뉨수를 입력하시오:100 나눗수를 입력하시오:0 0으로 나눌 수 없습니다! 다시 입력하세요 나눗수를 입력하시오:5 100를 5로 나누면 몫은 20입니다.

i가 4일 때 ArrayIndexOutOfBoundsException 예외 발생 예제 3-16 : 범위를 벗어난 배열의 접근 배열의 인덱스가 범위를 벗어날 때 발생하는 ArrayIndexOutOfBoundsException을 처리하는 프로그램을 작성하시오. public class ArrayException { public static void main (String[] args) { int[] intArray = new int[5]; intArray[0] = 0; try { for (int i=0; i<5; i++) { intArray[i+1] = i+1 + intArray[i]; System.out.println("intArray["+i+"]"+"="+intArray[i]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("배열의 인덱스가 범위를 벗어났습니다."); i가 4일 때 ArrayIndexOutOfBoundsException 예외 발생 intArray[0]=0 intArray[1]=1 intArray[2]=3 intArray[3]=6 배열의 인덱스가 범위를 벗어났습니다.

예제 3-17 : 입력오류시발생하는 예외(InputMismatchException) import java.util.Scanner; import java.util.InputMismatchException; public class InputException { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("정수 3개를 입력하세요"); int sum=0, n=0; for(int i=0; i<3; i++) { System.out.print(i+">>"); try { n = scanner.nextInt(); // 정수 입력 } catch(InputMismatchException e) { System.out.println("정수가 아닙니다. 다시 입력하세요!"); scanner.next(); // 입력 스트림에 있는 정수가 아닌 토큰을 버린다. i--; // 인덱스가 증가하지 않도록 미리 감소 continue; // 다음 루프 sum += n; // 합하기 System.out.println("합은 " + sum); scanner.close(); 사용자가 문자를 입력하면 InputMismatchException 예외 발생 정수 3개를 입력하세요 0>>5 1>>R 정수가 아닙니다. 다시 입력하세요! 1>>4 2>>6 합은 15

예제 3-18 : 정수가 아닌 문자열을 정수로 변환할 때 예외 발생(NumberFormatException) public class NumException { public static void main (String[] args) { String[] stringNumber = {"23", "12", "3.141592", "998"}; int i=0; try { for (i=0; i<stringNumber.length; i++) { int j = Integer.parseInt(stringNumber[i]); System.out.println("숫자로 변환된 값은 " + j); } catch (NumberFormatException e) { System.out.println(stringNumber[i] + "는 정수로 변환할 수 없습니다."); “3.141592”를 정수로 변환할 때 NumberFormatException 예외 발생 숫자로 변환된 값은 23 숫자로 변환된 값은 12 3.141592는 정수로 변환할 수 없습니다.