명품자바프로그래밍 3장 요약
반복문과 배열 그리고 예외 처리
자바의 반복문 : 중첩 반복도 여러 번 사용 가능. 반복문은 몇 번이고 중첩 반복 가능하다.
continue; 반복문 내에서 다음 반복으로 진행. break; 반복문 하나를 빠져나갈 때 사용
자바의 조건문이 궁금하다면? (이동)
(1) for ( 초기문; 조건식; 반복 후 작업 ){ 작업문 }
반복 횟수를 알 수 있는 경우. 조건식이 비워지거나 true면 무한반복
(2) while ( 조건식 ) { 작업문 }
반복 횟수를 알 수 없는 경우. 조건식이 비워지면 컴파일 오류 발생.
(3) do{ 작업문 } while ( 조건식 )
조건식이 작업문장 뒤에 있어서 한번 이상 작업문이 수행된다.
배열 : 인덱스와 인덱스에 대응하는 데이터들로 이루어진 연속적인 자료 구조로서 같은 타입의 데이터들이 순차적으로 저장된다. 자바에서 객체로 다루어지며 배열을 만드는 과정은 1) 배열 레퍼런스 변수 선언 , 2)배열 생성 과정으로 나뉜다. 배열 레퍼런스 변수 선언은 배열 객체의 주소 값을 가질 변수에 대한 선언이고 배열의 생성은 배열 원소에 대한 순차적 저장 공간을 확보하는 것이다. 배열 원소에 대한 접근은 배열 레퍼런스 변수명과 [ ] 사이에 원소의 인덱스를 적어 접근한다.
int [] array = new int[]; //1번방법
int array [] = new int[]; //2번방법
※ 배열의 크기는 배열 객체의 length 필드에 저장되며 첫 번째 원소의 인덱스는 0, 마지막 원소의 인덱스는 length-1이 된다. 배열의 인덱스는 정수만 가능. main() 메소드에 인자 전달은 String 타입의 배열을 이용한다.
배열의 크기 예외 : ArrayIndexOutOfBoundsException
배열과 for each 문
for (변수 : 배열레퍼런스) {반복작업문}
String names[]={"1", "2", "3", "4"};
for(String s:names) {
System.out.print(s+"");
}
※ 메소드가 배열을 리턴하는 경우 배열 공간 전체가 아닌 레퍼런스만 리턴된다. 따라서 리턴타입 선언 시 배열의 크기를 지정하지 않는다. 또한 리턴하는 배열의 타입이 리턴받는 레퍼런스 변수의 타입과 일치해야 한다.
int[] makeArray={ //리턴타입 / 메소드이름
int temp[]=new int[4];
return temp; //배열리턴
}
main( ) 메소드
자바가 실행을 시작할 때 자바가상기계JVM에 의해 호출되어야 하므로 public 속성이다.
자신을 포함하는 클래스의 객체가 생성되기 전 처음부터 JVM에 의해 호출되므로 static이다.
아무 값도 리턴하지 않기에 void 리턴타입을 가진다. 메인메소드를 끝내기 위해 리턴하려면 return;을 사용
※ 자바는 명령행에 입력된 인자들을 문자열배열 String[] 로 만들어 메인메소드에 매개변수로 전달한다. 이클립스의 run configuriation 창에서 도 손쉽게 입력받아 전달받을 수 있다.
public static void main(String[] args){ //명령행인자를 전달받는 코드
String a=args[0];
String b=args[1];
String c=args[2];
}
try-catch-finally : 자바예외발생처리문. 자바프로그램 실행 중 발생하는 오류로써 트라이캐치 블록으로 잡아 처리할 수 있는 것을 Exception이라고 부른다. 자바가 발생한 예외를 처리하는 코드를 작성해두지 않으면 프로그램은 강제 종료된다.
try{ }블록 : 예외가 발생할 가능성이 있는 코드
catch( ){ }블록 : 예외가 발생했을 때 처리할 코드
finally { }블록 : 예외가 발생하든 안하든 최종 실행하려는 코드로 생략 가능
예제3-1 for문을 이용하여 1에서 10까지 덧셈으로 표시하고 합을 출력하라.

예제3-2 while문은 반복 횟수를 알지 못하는 경우에 이용된다고 했다.while문을 이용하여 -1이 입력될 때까지 정수를 계속 입력받아 합을 구하고 평균을 출력하는 프로그램을 작성하라.

예제3-3 do-while문을 이용하여 'a'부터 'z'까지 출력하는 프로그램을 작성하라.

예제3-4 2중 중첩 for문을 사용하여 구구단을 출력하는 프로그램을 작성하라.

예제3-5 5개의 정수를 입력받고 그 중 양수들만 합하여 출력하는 프로그램을 작성하라.

예제3-6 exit이 입력되면 while문을 벗어나도록 break문을 활용하는 프로그램을 작성하라.

예제3-7 양수 5개를 입력받아 배열에 저장하고, 제일 큰 수를 출력하는 프로그램을 작성하라.

예제3-8 배열의 length 필드를 이용하여 배열 크기만큼 정수를 입력받고 평균을 구하는 프로그램을 작성하라.

예제3-9 for-each문을 활용하는 사례를 보자.

예제3-10 2차원 배열에 학년별로 1,2학기 성적으로 저장하고, 4년간 전체 평점 평균을 출력하라.

예제3-11 다음 그림과 같은 비정방형 배열을 만들어 값을 초기화하고 출력하라.

예제3-12 정수 4개를 가지는 일차원 배열을 생성하고 1,2,3,4로 초기화한 다음, 배열을 리턴하는 makearray()를 작성하고, 이 메소드로부터 배열을 전달받아 값을 출력하는 프로그램을 작성하라.

예제3-13 사용자가 명령행에 입력한 실수들을 main()메소드에서 전달받아 합을 구하는 프로그램을 작성하라.

예제3-14 두 정수를 입력받아 나눗셈을 하고 몫을 구하는 프로그램 코드이다. 사용자가 나누는 수에 0을 입력하면 arithmeticexception 예외가 발생하여 프로그램이 강제 종료된다.

예제3-15 try-catch블록을 이용하여 예제3-14를 수정하여, 정수를 0으로 나누는 경우에 0으로 나눌 수 없습니다!. 를 출력하고 다시 입력 받는 프로그램을 작성하라.

예제3-16 배열의 인덱스가 범위를 벗어날 때 발생하는 arrayindexoutofboundsexception을 처리하는 프로그램을 작성하라.

예제3-17 3개의 정수를 입력받아 합을 구하는 프로그램을 작성하라. 사용자가 정수가 아닌 문자를 입력할 때 발생하는 inputmisamatchexception 예외를 처리하고 다시 입력받도록 하라.

예제3-18 문자열을 정수로 변환할 때 발생하는 numberformatexception을 처리하는 프로그램을 작성하라.

OPEN CHALLENGE
