Microsoft PowerPoint - java1-lecture3.ppt [호환 모드]

Similar documents
(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 09. 예외처리

PowerPoint Presentation

Microsoft PowerPoint - 3장

Microsoft PowerPoint - java2-lecture2.ppt [호환 모드]

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 02. 표준 입출력

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

슬라이드 1

PowerPoint 프레젠테이션

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

<4D F736F F F696E74202D20C1A63036C0E520BCB1C5C3B0FA20B9DDBAB928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Java ...

PowerPoint Presentation

PowerPoint 프레젠테이션

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - Java7.pptx

슬라이드 1

Infinity(∞) Strategy

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 08.다형성

슬라이드 1

Cluster management software

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap05-제어문.pptx

PowerPoint 프레젠테이션

C++ Programming

4장.문장

PowerPoint Presentation

슬라이드 1

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

PowerPoint Presentation

Semantic Consistency in Information Exchange

gnu-lee-oop-kor-lec06-3-chap7

쉽게

PowerPoint Presentation

JAVA PROGRAMMING 실습 02. 표준 입출력

Visual Basic 반복문

예외 예외정의예외발생예외처리예외전파 단정 단정의선언 단정조건검사옵션 2

PowerPoint Template

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

PowerPoint Presentation

Design Issues

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

PowerPoint 프레젠테이션

윤성우의 열혈 TCP/IP 소켓 프로그래밍

TEST BANK & SOLUTION

윈도우즈프로그래밍(1)

슬라이드 1

12-file.key

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

9장.예외와 단정

PowerPoint 프레젠테이션

C 언어 프로그래밊 과제 풀이

PowerPoint 프레젠테이션

C프로-3장c03逞풚

PowerPoint Presentation

PowerPoint Presentation

금오공대 컴퓨터공학전공 강의자료

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

PowerPoint 프레젠테이션

Microsoft PowerPoint - lec2.ppt

02 C h a p t e r Java

설계란 무엇인가?

쉽게 풀어쓴 C 프로그래밍

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - 04-UDP Programming.ppt

Microsoft PowerPoint - chap-06.pptx

PowerPoint 프레젠테이션

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp

Microsoft PowerPoint - 2강

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 02. 표준 입출력

Microsoft PowerPoint - chap06-2pointer.ppt

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍

JAVA PROGRAMMING 실습 05. 객체의 활용

02장.배열과 클래스

Microsoft PowerPoint - ch07 - 포인터 pm0415

설계란 무엇인가?

Tcl의 문법

Microsoft PowerPoint - C++ 5 .pptx

10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

PowerPoint Presentation

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

PowerPoint Presentation

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

Microsoft PowerPoint - chap10-함수의활용.pptx

PowerPoint 프레젠테이션

Microsoft PowerPoint - [2009] 02.pptx

Transcription:

Control Statement 자바기초문법선택, 반복, 배열, 예외처리 514760-1 2017 년가을학기 9/11/2017 박경신 제어문의종류 제어문이란프로그램을실행할때는논리적인흐름이필요한데, 이러한문장의논리적인흐름을통제해주는것. 조건문 - 조건식의값에따라각각에해당되는명령문을수행한다. 예 ) if 문, switch 문 반복문 조건이만족하는동안특정명령문을반복적으로수행한다. 예 ) while 문, do 문, for 문, foreach 문 점프문 제어권을이동시킬때점프문을사용한다. 예 ) label 문, break 문, continue 문 If Statement 단순 if 문 if 다음의괄호안에는조건식 ( 논리형변수나논리연산 ) 조건식의값 true인경우, if문을벗어나다음문장이실행된다. false의경우에는 if 다음의문장이실행되지않고 if 문을빠져나온다. 실행문장이단일문장인경우둘러싸는 {, 생략가능 예제 : if 구문사용 점수가 80 점이이상이면합격을판별 import java.util.scanner; public class SuccessOrFail { Scanner in = new Scanner(System.in); System.out.print(" 점수를입력하시오 : "); int score = in.nextint(); if (score >= 80) System.out.println(" 축하합니다! 합격입니다."); 점수를입력하시오 : 95 축하합니다! 합격입니다.

If-Else Statement if-else 문 조건식이 true 면실행문장 1 실행후 if-else 문을벗어남 false 인경우에실행문장 2 실행후, if-else 문을벗어남 예제 : if-else 구문사용 입력된수가 3 의배수인지판별 import java.util.scanner; public class MultipleOfThree { Scanner in = new Scanner(System.in); System.out.print(" 수를입력하시오 : "); int number = in.nextint(); if (number % 3 == 0) System.out.println("3 의배수입니다."); else System.out.println("3 의배수가아닙니다."); 수를입력하시오 : 129 3 의배수입니다. If-Else Statement 다중 if-else 문 실행문장이다시 if문또는 if-else문을포함 else 문은바로전의 if문과짝을이룬다. 조건문이너무많은경우, switch 문사용권장 예제 : 다중 if-else 사용 키보드입력된성적에학점을부여하는프로그램작성 import java.util.scanner; public class Grading { char grade; Scanner a = new Scanner(System.in); while (a.hasnext()) { int score = a.nextint(); if(score >= 90) // score 가 90 이상인경우 grade = 'A'; 키가입력될때까지기다리며, 입력된키가있는경우 true 리턴. 라인의첫문자로 ctrl-z 키가입력되면 false 리턴 else if(score >= 80) // score 가 80 이상이면서 90 미만인경우 grade = 'B'; else if(score >= 70) // score 가 70 이상이면서 80 이만인경우 grade = 'C'; else if(score >= 60) // score 가 60 이상이면서 70 이만인경우 grade = 'D'; else // score 가 60 이만인경우 grade = 'F'; System.out.println(" 학점은 "+grade+" 입니다 "); 80 학점은 B 입니다 90 학점은 A 입니다 76 학점은 C 입니다

Ternary Conditional Operator?: 조건연산자?: 는 if-else 로바꿀수있음 i = a>b?a-b:b-a; if (a>b) i= a b; else i= b a; Switch Statement switch문은식과 case 문의값과비교 case의비교값과일치하면해당 case문의실행문장수행 break를만나면 switch문을벗어남 case의비교값과일치하는것이없으면 default 문실행 default문은생략가능 Switch Statement switch문내의break문 break 문장을만나면 switch문을벗어남 만일 case 문에 break문이없다면, 다음 case문의실행문장으로실행을계속하게되며, 언젠가 break를만날때까지 계속내려감 char grade = A ; switch (grade) { case A : System.out.println("90 ~ 100점입니다."); case B : System.out.println("90 ~ 100점입니다."); case C : System.out.println("90 ~ 100점입니다."); 90 ~ 100 점입니다. 80 ~ 89 점입니다. 예제 : switch 사용 switch 구문을사용하여학점에따른출력 public class GradeSwitch { char grade='c'; switch (grade) { case 'A': case 'B': System.out.println(" 참잘하였습니다."); case 'C': case 'D': System.out.println(" 좀더노력하세요."); case 'F': System.out.println(" 다음학기에다시수강하세요."); default: System.out.println(" 잘못된학점입니다."); 좀더노력하세요.

Switch Statement case 문의값의특징 switch 문은식의결과값을case 문과비교 사용가능한 case문의비교값 정수타입리터럴, JDK 1.7 부터는문자열리터럴도허용 int a = 0; int b = 1; int c = 25; switch(c%2) { case 1 : // 정수리터럴...; case 2: // 정수리터럴 String s = " 예 ; switch(s) { case " 예 " : // 문자열리터럴...; case " 아니요 : // 문자열리터럴...; Switch Statement 잘못된 case 문 switch(a) { case a : // 오류. 변수사용안됨 case a > 3 : // 오류. 수식안됨 case a == 1 : // 오류. 수식안됨 예제 : switch 사용한학점분류 import java.util.scanner; public class Grading2 { char grade; Scanner a = new Scanner(System.in); while (a.hasnext()) { int score = a.nextint(); switch (score/10) { case 10: case 9: grade = 'A'; case 8: grade = 'B'; case 7: grade = 'C'; case 6: grade = 'D'; default: grade = 'F'; System.out.println(" 학점은 "+grade+" 입니다 "); 100 학점은 A 입니다 55 학점은 F 입니다 76 학점은 C 입니다 Loop Q) 반복구조는왜필요한가? A) 같은처리과정을되풀이하는것이필요하기때문이다. 학생 30 명의평균성적을구하려면같은과정을 30 번반복하여야한다.

Loop For Statement 자바반복문의종류 for 문 while 문 do while 문 for 문이실행한후오직한번만실행되는초기화작업 콤마 (, ) 로구분하여여러문장나열가능 초기화할일없으면비어둘수있음 논리형변수나논리연산만가능 반복조건이 true 이면반복계속, false 이면반복종료 반복조건이 true 상수인경우, 무한반복 반복조건이비어있으면 true 로간주 반복작업문장들의실행후처리작업 콤마 (, ) 로구분하여여러문장나열가능 For Statement For 문의실행과정을나타내는순서도 주로정해진횟수만큼반복할때사용됨 또는정해진범위를반복할때활용됨 For Statement 0~9 까지정수출력 int i; for(i = 0; i < 10; i++) { System.out.print(i); For-loop 안에변수선언가능 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 sum = 0; for(int i = 100; i >= 0; i--) sum += i; int sum; for(int i = 0, sum=0; i <= 100; i++) sum += i;

For Statement 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 문내에서만사용가능... 예제 : for 구문사용 1부터 10까지덧셈을표시하고합계산 public class ForSample { int i, j; for (j=0,i=1; i <= 10; i++) { 1+2+3+4+5+6+7+8+9+10=55 j += i; System.out.print(i); if(i==10) { System.out.print("="); System.out.print(j); else System.out.print("+"); 예제 : for 구문사용 사용자로부터정수를입력받아 factorial 계산 public class Factorial { long fact = 1; int n; System.out.printf(" 정수를입력하시오 : "); Scanner scan = new Scanner(System.in); n = scan.nextint(); for (int i=1; i <= n; i++) { fact = fact * i; System.out.printf("%d! 는 %d입니다. ", n, fact); 정수를입력하시오 : 5 5! 는 120입니다. 예제 : for 구문사용 사용자로부터양의정수를입력받아약수를계산 public class Divisor { System.out.printf(" 양의정수를입력하시오 : "); Scanner scan = new Scanner(System.in); int n = scan.nextint(); System.out.println(n + " 의약수는다음과같습니다."); for (int i=1; i <= n; ++i) { if (n % i == 0) System.out.print(" " + i); 양의정수를입력하시오 : 100 100 의약수는다음과같습니다. 1 2 4 5 10 25 50 100

While Statement 반복조건이 true이면반복, false 이면반복종료 반복조건이없으면컴파일오류 처음부터반복조건을통과한후작업문수행 While Statement While 문의실행과정을나타내는순서도 예제 : while 구문사용 사용자로부터숫자를입력받아입력받은모든수의평균을출력. 0 이입력되면입력이종료되고평균계산. import java.util.scanner; public class WhileSample { Scanner scan = new Scanner(System.in); int n = 0; double sum = 0; int i=0; while ((i = scan.nextint())!= 0) { sum += i; n++; 10 20 30 40 0 마지막입력 입력된수의개수는 4 개이며평균은 25.0 입니다. System.out.println(" 입력된수의개수는 " + n + " 개이며평균은 " + sum / n + " 입니다."); 예제 : while 구문사용 사용자로부터두수를입력받아최대공약수를계산 public class Gcd { int x, y, r; System.out.printf(" 두개의정수를입력하시오 ( 큰수, 작은수 ): "); Scanner scan = new Scanner(System.in); x = scan.nextint(); y = scan.nextint(); while (y!=0) { r = x % y; y = r; System.out.println(" 최대공약수는 " + x); 두개의정수를입력하시오 ( 큰수, 작은수 ) : 24 36 최대공약수는 12

Do-While Statement Do-While Statement do-while 문의실행과정을나타내는순서도 무조건최소한번은실행 반복조건이 true 이면반복, false 이면반복종료 반복조건이없으며컴파일오류 예제 : do-while 구문사용 a 부터 z 까지출력 public class DoWhileSample { char a = 'a'; do { System.out.print(a); a = (char) (a + 1); while (a <= 'z'); Nested Loop 중첩반복문 (nested loop) 은반복문안에다른반복문이위치 abcdefghijklmnopqrstuvwxyz

Nested Loop 중첩반복 반복문이다른반복문을내포하는구조 이론적으로는몇번이고중첩반복가능 너무많은중첩반복은프로그램구조를복잡하게하므로 2중또는 3중반복이적당 for(i=0; i<100; i++) { // 100 개의학교성적을모두더한다....... for(j=0; j<10000; j++) { // 10000 명의학생성적을모두더한다....... 10000 명의학생이있는 100 개대학의모든학생성적의합을구할때, for 문을이용한이중중첩구조 예제 : Nested-Loop 사용 중첩 for 문을사용하여구구단을한줄에한단씩출력 public class NestedLoop { int i, j; for (i = 1; i < 10; i++,system.out.println()) { for (j = 1; j < 10; j++,system.out.print('\t')) { System.out.print(i + "*" + j + "=" + i*j); 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 Statement continue 문 반복문을빠져나가지않으면서 반복문실행도중다음반복을진행 for ( 초기문 ; 조건식 ; 반복후작업 ) {... continue;... while ( 조건식 ) {... continue;... 분기 do {... continue;... while ( 조건식 ); 조건식으로분기 예제 : for 와 continue 문사용 For와 continue문을사용하여 1부터 100까지짝수의합을계산 public class ContinueExample { int sum = 0; for (int i = 1; i <= 100; i++) { if (i%2 == 1) // 홀수이면 continue; else sum += i; System.out.println("1부터 100까지짝수의합은 " + sum); 1 부터 100 까지짝수의합은 2550 조건식으로분기

Break Statement break 문 반복문하나를완전히빠져나갈때사용 break 문은하나의반복문만벗어남 중첩반복의경우안쪽반복문의 break 문이실행되면안쪽반복문만벗어남 예제 : while 과 break 문사용 while과 break문을사용하여 -1이입력될때까지입력된숫자의개수를출력 import java.util.scanner; public class BreakExample { Scanner in = new Scanner(System.in); int num = 0; while (true) { if (in.nextint() == -1) num++; System.out.println(" 입력된숫자개수는 " + num); 10 8 9 5 마지막입력 -1 입력된숫자개수는 4 Array 배열 (array) 여러개의데이터를같은이름으로활용할수있도록해주는자료구조 인덱스 (Index, 순서번호 ) 와인덱스에대응하는데이터들로이루어진자료구조 배열을이용하면한번에많은메모리공간선언가능 배열은같은타입의데이터들이순차적으로저장되는공간 원소데이터들이순차적으로저장됨 인덱스를이용하여원소데이터접근 반복문을이용하여처리하기에적합한자료구조 ( 주로 for 또는 foreach 반복문과많이사용됨 ) 배열인덱스 0부터시작 인덱스는배열의시작위치에서부터데이터가있는상대위치 Array 자바배열의필요성과모양

Array 배열선언과배열생성의두단계필요 배열선언 int char intarray[]; chararray[]; 배열생성 intarray = new int[10]; chararray = new char[20]; 선언과초기화 배열생성과값초기화 또는 또는 int[] char[] // 총 10 개의정수배열생성및값초기화 int intarray[] = {0,1,2,3,4,5,6,7,8,9; intarray; chararray; int intarray[] = new int[10]; char chararray[] = new char[20]; Array 배열선언과생성 잘못된배열선언 //int intarray[10]; // 컴파일오류. 배열의크기를지정할수없음 Array 배열을초기화하면서생성한결과 Array 배열참조 생성된 1 개의배열을다수의레퍼런스가참조가능

Array 배열원소접근 반드시배열생성후접근 int intarray []; // 배열선언 intarray[4] = 8; // 오류, 아직 intarray 배열의메모리가할당되지않았음 배열변수명과 [] 사이에원소의인덱스를적어접근 배열의인덱스는 0 부터시작 배열의마지막항목의인덱스는 ( 배열크기 1) int[] intarray; // 배열선언 intarray = new int[10]; // 배열생성 intarray[3]=6; // 배열에값을저장 int n = intarray[3]; // 배열로부터값을읽음 예제 : Array 사용 array 를사용하여숫자를입력받아저장하고입력된 숫자중에제일큰수를화면에출력 import java.util.scanner; public class ArrayAccess { Scanner in = new Scanner(System.in); int intarray[] = new int[5]; int max = 0; for (int i = 0; i < 5; i++) { System.out.print(" 숫자를입력하시오 :"); 숫자를입력하시오 :1 숫자를입력하시오 :39 숫자를입력하시오 :78 숫자를입력하시오 :100 intarray[i] = in.nextint(); 숫자를입력하시오 :99 if (intarray[i] > max) 입력된수에서가장큰수는 max = intarray[i]; 100입니다. System.out.print(" 입력된수에서가장큰수는 " + max + " 입니다."); 예제 : 문자열 Array 사용 문자열 array 를사용하여 5 가지피자토핑을출력 public class PizzaTopping { String[] toppings = { "Pepperoni", "Mushrooms", "Onions", "Sausage", "Bacon" ; for (int i = 0; i < toppings.length; i++) { System.out.print(toppings[i] + " "); Pepperoni Mushrooms Onions Sausage Bacon Array 배열인덱스 인덱스는 0부터시작하며마지막인덱스는 ( 배열크기 -1) 인덱스는정수타입만가능 int intarray [] = new int[5]; // 인덱스는 0~4 까지가능 int n = intarray[-2]; // 실행오류. -2 는인덱스로적합하지않음 int m = intarray[5]; // 실행오류. 5 는인덱스의범위 (0~4) 를넘었음 배열의크기 배열의크기는배열레퍼런스변수를선언할때결정되지않음 배열의크기는배열생성시에결정되며, 나중에바꿀수없음 배열의크기는배열의 length 필드에저장 int size = intarray.length;

Array 예제 : Array 를사용한원소의평균구하기 import java.util.scanner; public class ArrayTest2 { final int STUDENTS = 5; int total = 0; Scanner scan = new Scanner(System.in); 성적을 5 개입력받아배열에저장하고평균성적을계산 int[] scores = new int[students]; for (int i = 0; i < scores.length; i++) { System.out.print(" 성적을입력하시오 :"); 성적을입력하시오 :10 성적을입력하시오 :20 성적을입력하시오 :30 성적을입력하시오 :40 scores[i] = scan.nextint(); 성적을입력하시오 :50 평균성적은 30입니다. for (int i = 0; i < scores.length; i++) total += scores[i]; System.out.println(" 평균성적은 " + total / STUDENTS + " 입니다 "); 예제 : 순차탐색 (Sequential Search) import java.util.scanner; public class SeqSearch { int s[] = { 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 ; int value, index = -1; Scanner scan = new Scanner(System.in); System.out.print(" 탐색할값을입력하시오 : "); value = scan.nextint(); for (int i = 0; i < s.length; i++) { if (s[i] == value) index = i; if (index < s.length && index >= 0) System.out.println("" + value + " 값은 " + index + " 위치에있습니다."); 탐색할값을입력하시오 :50 50 값은 5 위치에있습니다. Array & For-each For-each 문 배열이나나열 (enumeration) 의각원소를순차적으로접근하는데유용한 for 문 int[] num = { 1,2,3,4,5 ; int sum = 0; // 반복될때마다 k는 num[0], num[1],..., num[4] 값으로설정 for (int k : num) sum += k; 합은 15 System.out.println(" 합은 " + sum); String names[] = { " 사과 ", " 배 ", " 바나나 ", " 체리 ", " 딸기 ", " 포도 " ; // 반복할때마다 s는 names[0], names[1],..., names[5] 로설정 for (String s : names) System.out.print(s + " "); 사과배바나나체리딸기포도

Anonymous Array 자바에서는배열의이름을지정하지않고단순히초기값만으로배열을생성시킬수있음 무명배열 (Anonymous array) 는즉시배열을만들어서함수의인수로전달하고자할때많이사용됨 new int[] { 1, 2, 3, 4, 5 ; // 배열의이름이없다 // 초기값을가지는무명배열생성 public static int sum(int[] numbers) { int total = 0; for (int i=0; i<numbers.length; i++) { total = total + numbers[i]; return total; System.out.println( 합은 : + sum(new int[] {1, 2, 3, 4)); 합은 10 2D Array 2차원배열선언 int intarray[][]; char chararray[][]; float floatarray[][]; 2 차원배열생성 intarray = new int[2][5]; chararray = new char[5][5]; floatarray = new float[5][2]; 또는 또는 2 차원배열선언, 생성, 초기화 int[][] intarray; char[][] chararray; float[][] floatarray; int char float int intarray[][] = {{0,1,2,{3,4,5,{6,7,8; char chararray[][] = {{'a', 'b', 'c',{'d, 'e', 'f'; float floatarray[][] = {{0.01, 0.02, {0.03, 0.04; intarray[] = new int[2][5]; chararray[] = new char[5][5]; floatarray[] = new float[5][2]; 2D Array 예제 : 2D Array 사용 지난 3 년간매출총액과연평균매출을계산 public class SalesRevenue { int intarray[][] = {{90, 90, 110, 110, {120, 110, 100, 110, {120, 140, 130, 150 ; double sum = 0; 2 차원배열의 length i.length -> 2 차원배열의행의개수로서 2 i[n].length 는 n 번째행의열의개수 i[0].length -> 0 번째행의열의개수로서 5 i[1].length -> 1 번째행의열의개수로서역시 5 for (int i = 0; i < intarray.length; i++) // intarray.length=3 for (int j = 0; j < intarray[i].length; j++) // intarray[i].length=4 sum += intarray[i][j]; System.out.println(" 지난 3 년간매출총액은 " + sum + " 이며연평균매출은 + sum/intarray.length + " 입니다."); 지난 3 년간매출총액은 1380.0 이며연평균매출은 460.0 입니다.

비정방형배열 비정방형배열의 length 정방형배열 각행의열의개수가같은배열 비정방형배열 각행의열의개수가다른배열 비정방형배열의생성 비정방형배열의 length i.length -> 2 차원배열의행의개수로서 4 i[n].length 는 n 번째행의열의개수 i[0].length -> 0 번째행의열의개수로서 1 i[1].length -> 1 번째행의열의개수로서 2 i[2].length -> 2 번째행의열의개수로서 3 i[3].length -> 3 번째행의열의개수로서 4 예제 : 비정방형배열의생성과접근 다음그림과같은비정방형배열을만들어값을초기화하고출력하시오. public class IrregularArray { int intarray[][] = new int[4][]; intarray[0] = new int[3]; intarray[1] = new int[2]; intarray[2] = new int[3]; intarray[3] = new int[2]; 메소드에서배열리턴 메소드의배열리턴 배열의레퍼런스만리턴 메소드의리턴타입 메소드가리턴하는배열의타입은리턴받는배열타입과일치 리턴타입에배열의크기를지정하지않음 for (int i = 0; i < intarray.length; i++) for (int j = 0; j < intarray[i].length; j++) intarray[i][j] = (i+1)*10 + j; for (int i = 0; i < intarray.length; i++) { for (int j = 0; j < intarray[i].length; j++) System.out.print(intArray[i][j]+" "); System.out.println(); 10 11 12 20 21 30 31 32 40 41

예제 : 배열리턴사용 main(string [] args) 메소드의인자전달 배열을생성하고각원소값을출력하는프로그램을작성하시오. 배열생성은배열을생성하여각원소의인덱스값으로초기화하여반환하는메소드를이용한다. public class ReturnArray { static int[] makearray() { int temp[] = new int[4]; for (int i=0;i<temp.length;i++) temp[i] = i; return temp; int intarray []; intarray = makearray(); for (int i = 0; i < intarray.length; i++) System.out.println(intArray[i]); 0 1 2 3 C:\>java Hello abc 3 % 5.7 class Hello 생성 public static void main(string[] args) { String a = args[0]; // a 는 "abc" String b = args[1]; // b 는 "3" String c = args[2]; // c 는 "%" String d = args[3]; // d 는 "5.7" args abc 3 % 5.7 args.length => 4 args[0] => "abc" args[1] => "3" args[2] => "%" args[3] => "5.7" 이클립스에서 main() 메소드의인자전달 main() 의인자이용예 Run 메뉴의 Run Configurations 항목에서 main() 메소드의인자나열 public class Calc { int sum = 0; for(int i=0; i<args.length; i++) { // 명령행인자의개수만큼반복 int n = Integer.parseInt(args[i]); // 명령행인자인문자열을정수로변환 sum += n; // 숫자를합한다. System.out.println("sum = " + sum); Integer.parseInt() 는매개변수로주어진문자열을정수로변환. Integer.parseInt("68") 은정수 68 리턴 명령행인자 2, 44, 68 을모두합하여 114 출력

예제 : main() 의인자들을받아서평균값을계산하는예제 여러개의실수를 main() 메소드인자로전달받아평균값을구하는프로그램을작성하시오. public class MainParameter { double sum = 0.0; for (int i=0; i<args.length; i++) sum += Double.parseDouble(args[i]); System.out.println(" 합계 :" + sum); System.out.println(" 평균 :" + sum/args.length); Double.parseDouble() 는매개변수로주어진문자열을실수로변환. Double.parseDouble("7 7.5") 은실수 77.5 리턴 예제 : 정수가아닌문자열을정수로변환할때예외발생 문자열을정수로변환할때발생하는 NumberFormatException 을 처리하는프로그램을작성하라. public class NumException { String[] stringnumber = {"23", "12", "998", "3.141592"; try { for (int i = 0; i < stringnumber.length; i++) { int j = Integer.parseInt(stringNumber[i]); System.out.println(" 숫자로변환된값은 " + j); catch (NumberFormatException e) { System.out.println(" 정수로변환할수없습니다."); 숫자로변환된값은 23 숫자로변환된값은 12 숫자로변환된값은 998 정수로변환할수없습니다. 3.141592 를정수로변환할때 NumberFormatException 예외발생 예외와예외클래스 오류의종류 에러 (Error) 하드웨어의잘못된동작또는고장으로인한오류 에러가발생되면 JVM실행에문제가있으므로프로그램종료 정상실행상태로돌아갈수없음 예외 (Exception) 사용자의잘못된조작또는개발자의잘못된코딩으로인한오류 예외가발생되면프로그램종료 예외처리 추가하면정상실행상태로돌아갈수있음 예외와예외클래스 예외의종류 일반예외 ( 컴파일체크 Exception) 컴파일하는과정에서예외처리코드가필요한지검사 예외처리코드없으면컴파일오류발생 실행예외 (RuntimeException) 예외처리코드를생략하더라도컴파일이되는예외 ' 경험 따라예외처리코드작성필요

예외클래스 자주발생하는예외 예외클래스 Java 는예외를클래스로관리 JVM 이프로그램을실행하는도중에예외가발생하면해당예외클래스로객체를생성 예외처리코드에서예외객체를이용 실행예외 (RuntimeException) NullPointerException 객체참조가없는상태 null 값갖는참조변수로객체접근연산자인도트 (.) 사용했을때발생 실행예외 (RuntimeException) NumberFormatException 숫자로변환될수없는문자가포함되어있는문자열을숫자로변경할경우 Integer.parseInt(String s) Double.parseDouble(String s) ArrayIndexOutOfBoundsException 배열에서인덱스범위초과하여사용할경우발생 public class NumberFormatExceptionExample { String data1 = "100"; String data2 = "a100"; int value1 = Integer.parseInt(data1); int value2 = Integer.parseInt(data2); 실행시매개값을주지않을경우예외발생 int result = value1 + value2; System.out.println(data1 + "+" + data2 + "=" + result);

실행예외 (RuntimeException) ClassCastException 타입변환이되지않을경우발생 정상코드 예외발생코드 실행예외 (RuntimeException) ClassCastException 타입변환이되지않을경우발생 public class NumberFormatExceptionExample { Dog dog = new Dog(); changedog(dog); Cat cat = new Cat(); changedog(cat); public static void changedog(animal animal) { //if(animal instanceof Dog) { Dog dog = (Dog) animal; //ClassCastException 발생가능 // class Animal { class Dog extends Animal { class Cat extends Animal { 예제 : ArithmeticException 예외처리 try-catch 문을이용하여정수를 0 으로나누려고할때 "0 으로나룰수없습니다." 라는경고메시지를출력하도록프로그램을작성하시오. import java.util.scanner; public class ExceptionExample2 { Scanner rd = new Scanner(System.in); int divisor = 0; int dividend = 0; System.out.print(" 나뉨수를입력하시오 :"); dividend = rd.nextint(); System.out.print(" 나눗수를입력하시오 :"); divisor = rd.nextint(); try { System.out.println(dividend+" 를 "+divisor+" 로나누면몫은 "+ dividend/divisor+" 입니다."); catch (ArithmeticException e) { System.out.println("0으로나눌수없습니다."); 나뉨수를입력하시오 :100 나눗수를입력하시오 :0 0 으로나눌수없습니다. ArithmeticException 예외발생 예제 : 범위를벗어난배열의접근 배열의인덱스가범위를벗어날때발생하는 ArrayIndexOutOfBoundsException을처리하는프로그램을작성하시오. public class ArrayException { int[] intarray = new int[5]; i가 4일때 ArrayIndexOutOfBoundsException 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(" 배열의인덱스가범위를벗어났습니다."); intarray[0]=0 intarray[1]=1 intarray[2]=3 intarray[3]=6 배열의인덱스가범위를벗어났습니다.

예제 : 정수가아닌문자열을정수로변환할때예외발생 문자열을정수로변환할때발생하는 NumberFormatException 을처리하는프로그램을작성하라. public class NumException { String[] stringnumber = {"23", "12", "998", "3.141592"; try { for (int i = 0; i < stringnumber.length; i++) { int j = Integer.parseInt(stringNumber[i]); System.out.println(" 숫자로변환된값은 " + j); catch (NumberFormatException e) { System.out.println(" 정수로변환할수없습니다."); 숫자로변환된값은 23 숫자로변환된값은 12 숫자로변환된값은 998 정수로변환할수없습니다. 3.141592 를정수로변환할때 NumberFormatException 예외발생 예외처리코드 (try-catch-finally) 예외처리코드 예외발생시프로그램종료막고, 정상실행유지할수있도록처리 일반예외 : 반드시작성해야컴파일가능 실행예외 : 컴파일러가체크해주지않으며개발자경험의해작성 try catch finally 블록이용해예외처리코드작성 예외처리코드 (try-catch-finally) public class TryCatchFinallyRuntimeExceptionExample { String data1 = null; String data2 = null; try { 실행시매개값을주지않을경우예외발생 data1 = args[0]; data2 = args[1]; catch(arrayindexoutofboundsexception e) { System.out.println(" 실행매개값의수가부족합니다."); System.out.println("[ 실행방법 ]"); System.out.println("java TryCatchFinallyRuntimeExceptionExample num1 num2"); return; try { int value1 = Integer.parseInt(data1); 실행시매개값을잘못주었을경우예외발생 int value2 = Integer.parseInt(data2); int result = value1 + value2; System.out.println(data1 + "+" + data2 + "=" + result); catch(numberformatexception e) { System.out.println(" 숫자로변환할수없습니다."); finally { System.out.println(" 다시실행하세요."); 예외종류에따른처리코드 다중 catch 하나의 try 블록내부에서다양한종류의예외발생시 각예외별로예외처리코드 (catch 블록 ) 다르게구현 단하나의 catch 블록만실행

예외종류에따른처리코드 public class CatchByExceptionKindExample { try { String data1 = args[0]; String data2 = args[1]; 실행시매개값을주지않을경우예외발생 int value1 = Integer.parseInt(data1); int value2 = Integer.parseInt(data2); 실행시매개값을잘못주었을경우예외발생 int result = value1 + value2; System.out.println(data1 + "+" + data2 + "=" + result); catch(arrayindexoutofboundsexception e) { System.out.println(" 실행매개값의수가부족합니다."); System.out.println("[ 실행방법 ]"); System.out.println("java CatchByExceptionKindExample num1 num2"); catch(numberformatexception e) { System.out.println(" 숫자로변환할수없습니다."); finally { System.out.println(" 다시실행하세요."); 예외종류에따른처리코드 하위예외는상위예외를상속 하위예외는상위예외타입도됨 catch 순서 상위예외가아래에위치해야 상위예외 Exception 이위에있을경우 상위예외 Exception 이아래에있을경우 예외종류에따른처리코드 public class CatchOrderExample { try { String data1 = args[0]; String data2 = args[1]; int value1 = Integer.parseInt(data1); int value2 = Integer.parseInt(data2); int result = value1 + value2; System.out.println(data1 + "+" + data2 + "=" + result); catch(arrayindexoutofboundsexception e) { System.out.println(" 실행매개값의수가부족합니다."); catch(exception e) { System.out.println(" 실행에문제가있습니다."); finally { System.out.println(" 다시실행하세요."); 예외종류에따른처리코드 멀티 (multi) catch 자바 7부터는하나의 catch 블록에서여러개의예외처리가능 동일하게처리하고싶은예외를 로연결

예외종류에따른처리코드 public class MultiCatchExample { try { String data1 = args[0]; String data2 = args[1]; 실행시매개값을주지않을경우예외발생 int value1 = Integer.parseInt(data1); 실행시매개값을잘못주었을경우예외발생 int value2 = Integer.parseInt(data2); int result = value1 + value2; System.out.println(data1 + "+" + data2 + "=" + result); catch(arrayindexoutofboundsexception NumberFormatException e) { System.out.println(" 실행매개값의수가부족하거나숫자로변환할수없습니다.."); catch(exception e) { System.out.println(" 알수없은예외발생 "); finally { System.out.println(" 다시실행하세요."); 자동리소스닫기 try-with-resources 예외발생여부와상관없음 사용했던리소스객체의 close() 메소드호출해리소스닫음 리소스객체 각종입출력스트림, 서버소켓, 소켓, 각종채널 java.lang.autocloseable 인터페이스구현하고있어야함 예외떠넘기기 (throws) throws 메소드선언부끝에작성 메소드내에서처리하지않은예외를메소드호출한곳 (calling method) 으로떠넘기는역할 예외떠넘기기 (throws) throws throws 선언된메소드를호출하는메소드 (calling method) 는 1. 반드시 try 블록내에서호출 2. catch 블록에서떠넘겨받은예외를처리함 3. try-catch 블록으로예외처리를하지않고 throws 키워드로자신도 다시예외를떠넘길수있음 3. throws ClassNotFoundException 1. try block 2. catch block 1.2 1.1 예외발생

사용자정의예외와예외발생 사용자정의예외 (user-defined exception) 클래스선언 자바표준 API 에서제공하지않는예외 애플리케이션서비스와관련된예외, Application Exception E.g. 잔고부족예외, 계좌이체실패예외, 회원가입실패예외. 사용자정의예외클래스선언방법 1. 예외클래스상속 일반예외 : Exception class 상속 실행예외 : RuntimeException class 상속 2. 생성자정의 매개변수없는기본생성자, String 타입의매개변수를갖는생성자 사용자정의예외와예외발생 예외발생시키기 (throw) 코드에서예외발생시키는법 - 예외객체생성 호출한곳에서발생한예외를처리하도록 사용자정의예외와예외발생 사용자정의예외와예외발생 public class BalanceInsufficientException extends Exception { public BalanceInsufficientException() { public BalanceInsufficientException(String message) { super(message); public class Account { private long balance; public Account() { 1. Exception class 상속 2. constrctors 생성 public long getbalance() { return balance; public void deposit(int money) { balance += money; 4. 호출한곳에서발생한예외를처리하도록함 public void withdraw(int money) throws BalanceInsufficientException { if(balance < money) { 3. 사용자정의예외발생 예외객체생성 throw new BalanceInsufficientException(" 잔고부족 :"+(money-balance)+" 모자람 ); balance -= money; public class AccountExample { Account account = new Account(); // 예금하기 account.deposit(10000); System.out.println(" 예금액 : " + account.getbalance()); // 출금하기 try { account.withdraw(30000); catch(balanceinsufficientexception e) { String message = e.getmessage(); System.out.println(message); System.out.println(); e.printstacktrace(); 5. try block에서메소드호출 6. catch block에서사용자정의예외처리 7. 예외정보얻기 (8 절 )

예외정보얻기 getmessage() 예외발생시킬때생성자매개값으로사용한메시지리턴 예외정보얻기 printstacktrace() 예외발생코드를추적하여모두콘솔에출력 프로그램테스트하면서오류찾을때유용하게활용 원인세분화하기위해예외코드포함 ( 예 : 데이터베이스예외코드 ) catch() 절에서활용