본문 바로가기

5. 참조타입

5.6.7_다차원 배열

자바는 1차원 배열을 이용해서 2차원 배열을 구현한다. 

 

2차원 배열 생성 

배열 길이만 입력하고 생성하는 방법

int[][] 배열이름 = new int[길이][길이]

 

값목록으로 생성하는 방법

타입[][] 변수 = { {값1,값2,...}, {값1, 값2,...} };

이름이 scores인 2차원 배열을 만들어보자. 

int[][] scores = new int[2][3]

일차원 배열이 서로 연결된 구조


길이가 다른 배열도 생성 할 수 있다. 

int[][] scores = new int[2][];
scores[0] = new int[3];
scpres[1] = new int[2];

 

 

일차원 배열이 서로 연결된 구조

 

배열 변수인 scores는 길이 2인 배열A를 참조한다. 

배열A의 scores[0]은 다시 길이 3인 배열B를 참조한다.

배열A의 scores[1]은 다시 길이 2인 배열C를 참조한다. 

 


배열의 길이

따라서 배열의 길이

scores.length = 배열A의 길이 = 2 (총배열길이6 아님.)

scores[0].length = 배열B의 길이 = 3

scores[1].length = 배열C의 길이 = 2

 

-또한 배열 B, C와 같이 같은 배열 안에 있는 배열의 길이는 다를 수 있다. 

(∵ 자바는 일차원 배열이 서로 연결된 구조로 다차원배열을 구현하기 때문. 사용방식은 행렬과 같으나 실제 자바는 행렬과는 근본적으로 다르다. )

 

 

 


 

2차원 배열에 값 넣기

scores[0][1] = 10;
scores[1][2] = 5;

이렇게 저장된다. 

 

만약 

scores[0][2] = 3;

을 입력했다면 존재 하지 않은 자리이므로 에러가 난다. 

(에러이름: ArrayIndexOfBoundsException)

 


예시

다차원 배열을 출력 할 때에는 이중for문을 써야 한다. 

package sec06.exam05_array_in_array;

public class ArrayInArray {
	public static void main(String[] args) {
		
		//길이가 같은 배열 만들기
		int[][] mathScores = new int[2][3];
		
		for(int i=0; i<mathScores.length; i++) {		//2
			for(int k=0; k<mathScores.length; k++) {	//3
				System.out.println("mathScores["+i+"]["+k+"] = " + mathScores[i][k]);
			}
		}
		System.out.println();
		
		//길이가 다른 배열 만들기
		int[][] englishScores = new int[2][];
		englishScores[0] = new int[2];
		englishScores[1] = new int[3];
		
		for(int i=0; i<englishScores.length; i++) {		//2
			for(int k=0; k<englishScores.length; k++) {	//3
				System.out.println("englishScores["+i+"]["+k+"] = " + englishScores[i][k]);
			}
		}
		System.out.println();
		
		//값목록으로 2차원 배열 만들기
		int[][] javaScores = {{95, 88}, {92, 96, 80}};
		
		for(int i=0; i<javaScores.length; i++) {		//2
			for(int k=0; k<javaScores.length; k++) {	//3
				System.out.println("javaScores["+i+"]["+k+"] = " + javaScores[i][k]);
			}
		}
	}
}

실행결과:

mathScores[0][0] = 0
mathScores[0][1] = 0
mathScores[1][0] = 0
mathScores[1][1] = 0

englishScores[0][0] = 0
englishScores[0][1] = 0
englishScores[1][0] = 0
englishScores[1][1] = 0

javaScores[0][0] = 95
javaScores[0][1] = 88
javaScores[1][0] = 92
javaScores[1][1] = 96

'5. 참조타입' 카테고리의 다른 글

5.6.10_ 향상된 for문  (0) 2020.05.01
5.6.8_객체를 참조하는 배열  (1) 2020.04.30
5.6.6_커맨드 라인 입력  (0) 2020.04.30
5.6.1~5_배열, 배열 선언, 배열길이  (1) 2020.04.26
5.1_ 데이터 타입 분류  (0) 2020.04.18