반응형

2차원 배열

- 3차원 이상이 배열은 특별한 경우에서만 사용하기 때문에 2차원 배열만 다룬다.

- 정방형 배열 ( 각 행의  개수가 모두 동일한 배열)

- 비정방형 배열(행마다 열의 개수가 서로 다른 배열)

< 정방형 배열 >

1. 2차원 배열의 선언과 생성

int intArray[][];     		//int [][] intArray; 		로 쓸 수 있음
char charArray[][]; 		//char [][] charArray; 		로 쓸 수 있음
double doubleArray[][];		//double [][] doubleArray;	로 쓸 수 있음

 

new 연산자를 이용하여 생성하며 첫번째 [ ] 는 행(가로줄)의 개수를, 두번째 [ ]는 열(세로줄)의 개수를 나타낸다.

intArray[][] = new int [2][5];			// 2행 5열의 2차원 배열 생성     		
charArray[][] = new char [5][5]; 		// 5행 5열의 2차원 배열 생성	
doubleArray[][] = new double [5][2];	        // 5행 2열의 2차원 배열 생성

new int [2][5] ; (2행 5열)에 의해 생성된 2차원 배열의 구조

위 그림에서 2차원 배열의 length 의미를 살펴보면 다음과 같다.

2차원 배열도 래퍼런스 변수 선언과 배열 생성을 동시에 할 수 있다.

int intArray[][] = new int [2][5];   		
char charArray[][] = new char [5][5];	
double doubleArray[][] = new double [5][2];

2. 2차원 배열의 초기화

2차원 배열을 선언할 때 각 원소 값을 초기화하면 자동으로 원소 개수만한 배열 공간이 할당되고 원소 값으로 초기화 된다.

int intArray[][] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}};   		//3x3 배열 생성
char charArray[][] = {{'a', 'b', 'c'}, {'d', 'e', 'f'}};		//2x3 배열 생성 
double doubleArray[][] = {{0.01, 0.02}, {0.03, 0.04}}; 			// 2x2 배열 생성

 

3. 2차원 배열로 평점 구하기

double score[][] = {{3.3, 3.4},		// 1학년 1, 2학기 평점
	    	   {3.5, 3.6},       	// 2학년 1, 2학기 평점
	    	   {3.7, 4.0},       	// 3학년 1, 2학기 평점
	    	   {4.1, 4.2} };     	// 4학년 1, 2학기 평점
		
		double sum = 0;
		for(int year=0; year<score.length; year++) 
			for(int term=0; term<score[year].length; term++)
				sum += score[year][term];
			
			int n = score.length;
			int m = score[0].length;
			System.out.println("4년 전체 평점 평균은 "+ sum/(n*m));

< 비정방형 배열 >

1. 비 정방형 배열 작성 코드

int i[][]; 	    // 2차원 배열의 래퍼런스 변수 i 선언
i = new int[4][];   // 각 행을 가리키는 래퍼런스 배열 생성
i[0] = new int [1]; // 첫째 행에 1개 크기의 배열 생성
i[1] = new int [2]; // 둘째 행에 2개 크기의 배열 생성
i[2] = new int [3]; // 셋째 행에 3개 크기의 배열 생성
i[3] = new int [4]; // 넷째 행에 4개 크기의 배열 생성

<정방형 배열도 위와 같은 방법으로도 만들 수 있다.>

여기서  length 필드의 의미를 살펴보자.

* 어떤 메소드가 배열을 매개변수로 받을 때, 배열이 정방형인지 비정방형인지는 표시되지 않기 때문에 항상 length 필드를 사용하여 각 행의 열의 개수를 파악하여야 한다.

2. 배열 생성시 초기화를 통해 비정방형 배열 생성하기

int intArray[][] = { {0}, {1,2}, {3,4,5}, {6,7,8,9} };

 

3. 비정방형 배열의 생성과 접근

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

int intArray[][] = new int[4][];  // 각 행의 레퍼런스 배열 생성
intArray[0] = new int[3]; // 첫째 행의 정수 3개의 배열 생성
intArray[1] = new int[2]; // 둘째 행의 정수 2개의 배열 생성
intArray[2] = new int[3]; // 셋째 행의 정수 3개의 배열 생성
intArray[3] = new int[2]; // 넷째 행의 정수 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();
		}

< 배열 리턴 >

1. 메소드에서 배열 리턴

메소드에서 배열을 리턴하면 공간 전체가 아니라 배열에 대한 레퍼런스만 리턴된다.

 

메소드는 리턴 타입을 선언할때 [ ] 안에 배열의 크기를 지정하지 않으며 배열의 타입이 리턴받는 레퍼런스 변수의 타입과 일치해야 한다.

makeArray()메소드로 부터 배열을 리턴받는 코드는 아래와 같고

int [] intArray;		// makeArray의 리턴 타입과 동일한 타입 선언
intArray = makeArray(); 	// makeArray()메소드가 리턴하는 배열 받음

이 코드의 실행 결과는 아래와 같다.

intArray[0] = 5;
intArray[1] = 6;
intArray[2] = 7;
intArray[3] = 8;

intArray는 makeArray( )가 만들어 리턴한 배열을 가르키게 되어 intArray로 배열 원소에 접근 가능하다.

2. 배열 리턴 예제

정수 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] + " ");	//배열 모든 원소 출력
	}
}
반응형

+ Recent posts