Power Java 제10장 배열
이번 장에서 학습할 내용 자바에서 배열은 객체로 취급됩니다. 배열의 선언 배열의 사용 배열과 메소드 객체들의 배열 2차원 배열 정렬과 탐색
배열의 개념 배열(array): 같은 타입의 변수들의 모임
배열을 만드는 절차 먼저 배열 참조 변수부터 선언 int[] numbers; // 배열 참조 변수 선언 배열을 new 연산자를 사용하여서 생성 numbers = new int[6]; // 배열 객체 생성 int[] numbers = new int[6];
배열 예제
또 다른 배열 선언 방법 int[] values;// ① 자바 방식 int values[];// ② C언어 유사 방식 배열 초기화문 int[] values = { 10, 20, 30}; // []에 크기 넣을 수 없음 배열 참조 변수 선언, 배열 동적 생성, 초기화 동시 실행
중간 점검 문제 int형의 100개의 원소를 가지고 array로 참조되는 배열을 생성하는 문장을 써라. 2. 10개의 원소를 가지는 배열에서 올바른 인덱스 값의 범위는? 3. 만약 배열의 인덱스가 올바르지 않으면 어떻게 되는가? 4. { 1.2, 3.1, 6.7 }의 값으로 초기화되는 double형 배열을 생성하는 문장을 작성하시오.
배열의 사용
배열의 사용
배열의 크기는 length라는 필드로 알 수 있습니다. for(int i=0; i < numbers.length; i++) numbers[i] = (int)(Math.random()*1000); 배열의 크기는 length라는 필드로 알 수 있습니다. String은 length()가 메소드임!
for-each 루프
// AS-IS : for (int i = 0; i < a // AS-IS : for (int i = 0; i < a.length; i++) { doSomething(a[i]); } // TO-BE : for (Element e : elements) { doSomething(e); }
예제 String 배열 s
for each 루프를 사용할 수 없는 경우 배열 원소의 값을 변경하는 경우 역순으로 배열을 처리하는 경우 일부 원소만을 처리하는 경우 하나의 반복문에서 두 개 이상의 배열을 처리하는 경우 전통적인 for 문 사용!!
사용자가 배열의 크기를 지정 동적 배열 생성
중간 점검 문제 int형 정수를 저장하고 있는 배열 array의 모든 원소의 값을 두배로 만드는 반복 루프를 작성하라. 2. 사용자에게 배열의 크기를 받아서 double형 배열을 생성하는 문장을 작성하라. 3. for-each와 전통적인 for 루프를 비교하라. 4. 하나의 배열을 다른 배열로 복사하는 반복 루프를 작성하라.
배열을 메소드의 매개 변수로 전달 call 배열참조변수 복사!
예제(사용자 입력값의 평균)
예제
메소드의 반환값으로 배열 반환
중간 점검 문제 1. 배열이 메소드로 전달되면 어떤 값이 전달되는 것인가? 2. 배열 원소가 전달되는 경우와 배열 전체가 전달되는 경우를 비교하여 차이점을 설명하라. 3. int형 배열을 전달받아서 배열의 각 원소를 하나 증가시키는 메소드를 작성하시오.
객체들의 배열 객체들의 배열에서는 객체에 대한 참조값만을 저장 Car[] cars = new Car[5];
객체들의 배열 각 원소에 들어가는 객체는 따로 생성하여야 한다. cars[0] = new Cars();
예제
예제
중간 점검 문제 은행 계좌를 나타내는 클래스 BankAccount를 가정하자. BankAccount는 잔액만을 가지고 있다. 3개의 원소를 가지는 BankAccount의 배열을 생성하고 각 배열 원소를 BankAccount 객체로 초기화하라. BankAccount[] bank = new BankAccount[3]; for(int i =0; i < bank.length; i++) bank[i] = new BankAccount(); 2. 객체들의 배열을 메소드로 전달하면 무엇이 전달되는가? 배열 참조 변수 전달
2차원 배열
2차원 배열의 초기화와 크기 열의 개수
2차원 배열 매개 변수
Ragged Array(톱니형 배열) int[][] raggedArray = new int[3][]; P. 267 참조
배열의 응용: 정렬(Sorting) 선택 정렬: 최소값을 정렬되지 않은 첫번째 원소와 교환
선택 정렬 코드
배열의 응용: 이진 탐색
이진 탐색
이진 탐색
중간 점검 문제 선택 정렬에서 가장 작은 값은 몇 번이나 교환되는가? 2. 1024개의 원소가 있는 배열을 이진 탐색할 때 최대 몇 번의 비교가 필요한가? 3. 순차 탐색과 이진 탐색을 비교하라. 순차 탐색이란 배열의 첫 번째 원소부터 순차적으로 비교하여 탐색하는 알고리즘이다.
LAB 1. 사용자로부터 정수를 입력받아서 배열에 저장하고 출력하는 프로그램을 작성하여 보자. class TestArray { public static void main(String args[]) Scanner scan = new Scanner(System.in); // 10개의 정수를 저장할 수 있는 배열을 선언하고 생성하라. // 사용자로부터 정수를 받아서 배열에 저장하는 반복루프 // 배열에 저장된 정수를 출력하는 반복 루프 }
2. 배열에 저장된 정수를 출력할 때, for-each 반복 구조를 사용하여 보라. 3. 배열에 저장된 정수를 역순으로 출력하여 보라.
LAB 2. 사용자가 입력한 문자열에서 각각의 문자들이 나타나는 횟수를 계산하는 프로그램을 작성하여 보자. class CountLetter { public static void main(String args[]) Scanner scan = new Scanner(System.in); // 26개의 정수를 저장할 수 있는 배열 count를 선언하고 생성하라. __________________________________________ System.out.println("문자열을 입력하시오 : “); String buffer = scan.nextLine(); // 각 문자가 등장하는 회수를 계산한다. for(int i; i< buffer.length();i++) char ch = buffer.charAt(i); count[ch-'a']++; } // 배열에 저장된 횟수를 출력하는 반복루프 ___________________________________________
LAB 3. 배열에 대하여 실습하여 보자. 회사에서 직원들을 관리하는 프로그램을 작성하여보자. 직원들은 이름, 주소, 연봉, 전화번호를 가지고 있다. 직원은 Employee클래스로 표현된다. 회사 전체의 직원은 Employee의 배열 안에 저장된다. 1. 먼저 Employee클래스를 다음과 같이 작성하여 보자.
class Employee { String name; // 직원이름 ; // 주소 ; // 연봉 ; // 전화번호 // 각각 필드에 대하여 getter와 setter 메소드를 작성하라. .......... // toString() 메소드를 작성하여 본다. public String toString() }
2. Employee 클래스를 테스트하기 위하여 클래스를 하나 더 작성하여 보자. class TestEmployee { public static void main(String args[]) Scanner scan = new Scanner(System.in); // employee 배열 참조 변수 emp를 선언한다. ; // 크기가 2인 employee 배열을 생성한다. ; // 사용자로부터 데이터를 받아서 배열에 추가하여 본다. scan.next()로 이름, 주소, 연봉, 전화번호 입력 .... // // 배열에 저장된 모든 데이터를 출력한다. }
Q & A