[Java] demensinal array(다차원배열)
카테고리: Java
태그: coding Programming Java
다차원배열이란?
- 다차원 배열은 2차원 이상의 배열을 의미한다
- 배열의 인덱스마다 또 다른 배열의 주소를 보관하는 배열을 의미한다
- 즉, 2차원 배열은 1차원 배열 여러개를 하나로 묶어서 관리하는 배열을 의미한다
- 더 많은 차원의 배열을 사용할 수 있지만 일반적으로 2차원 배열보다 높은 차원의 배열은 사용 빈도가 현저희 작다
2차원 배열을 사용하는 방법
- 배열의 주소를 보관할 래퍼런스 변수 선언(stack)
- 여러개의 1차원 배열의 주소를 관리할 배열을 생성(heap)
- 각 인덱스에 관리하는 배열을 할당(heap)하여 주소를 보관하는 배열에 저장
- 생성한 여러 개의 일차원 배열에 차례로 접근해서 사용
package section02.demensinal;
public class Application1 {
public static void main(String[] args) {
/* 1. 배열의 주소를 보관할 래퍼런스 변수 선언(stack) */
int[][] iarr;
int iarr2[][];
int[] iarr3[];
/* 2. 여러 개의 1차원 배열의 주소를 관리하는 배열을 생성(heap) */
/*
* heap에 공간을 할당할 때 new연산자를 이용한다
* 배열은 주소를 관리하는 배열의 길이는 앞부분에 정수형으로 표기하여 반드시 크기를 지정해줘야 한다.
* */
// iarr = new int[][]; //크기를 지정하지 않으면 에러발생합니다.
// iarr = new int[][5]; //주소를 묶어서 관리할 배열의 크기를 지정하지 않으면 에러발생
iarr = new int[3][];
/* 3. 주소를 관리하는 배열의 인덱스마다 배열을 할당한다. */
iarr[0] = new int[5];
iarr[1] = new int[5];
iarr[2] = new int[5];
iarr2 = new int[3][5];
/* 4-1 배열을 하나씩 접근해서 출력하기 */
for (int i = 0; i < iarr[0].length; i++) {
System.out.println(iarr[0][i] + " ");
}
System.out.println();
for (int i = 0; i < iarr[1].length; i++) {
System.out.println(iarr[1][i] + " ");
}
System.out.println();
for (int i = 0; i < iarr[2].length; i++) {
System.out.println(iarr[2][i] + " ");
}
System.out.println();
System.out.println("iarr.length" + iarr.length);
for (int i = 0; i < iarr.length; i++) {
for (int j = 0; j < iarr[i].length; j++) {
System.out.println(iarr[i][j]);
}
}
}
}
- 출력값
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
iarr.length3
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
2차원 청변배열을 선언 및 할당하여 사용할 수 있다
- 배열의 선언 및 할당
- 정변 배열의 경우 각 인덱스별 배열을 따로 할당할 수도 있지만 선언과 동시에 모든 배열을 할당할 수 있다
- 자료형[][] 변수명 = new 자료형[할당할 배열의 갯수][할당할 배열의 길이]
package section02.demensinal;
public class Application2 {
public static void main(String[] args) {
int[][] iarr = new int[3][5]; // 길이 5의 배열을 3개 할당하고 그 주소를 묶어 관리하는 배열의 주소를 stack의 iarr에 저장한다.
/* 2. 각 배열의 인덱스에 접근해서 값 대입 후 출력 */
/*2-1. 각 인덱스 공간에 하나씩 접근하여 값 대입 후 출력 */
iarr[0][0] = 1;
iarr[0][1] = 2;
iarr[0][2] = 3;
iarr[0][3] = 4;
iarr[0][4] = 5;
iarr[1][0] = 6;
iarr[1][1] = 7;
iarr[1][2] = 8;
iarr[1][3] = 9;
iarr[1][4] = 10;
iarr[2][0] = 11;
iarr[2][1] = 12;
iarr[2][2] = 13;
iarr[2][3] = 14;
iarr[2][4] = 15;
System.out.print(iarr[0][0] + " ");
System.out.print(iarr[0][1] + " ");
System.out.print(iarr[0][2] + " ");
System.out.print(iarr[0][3] + " ");
System.out.print(iarr[0][4] + " ");
System.out.println();
System.out.print(iarr[1][0] + " ");
System.out.print(iarr[1][1] + " ");
System.out.print(iarr[1][2] + " ");
System.out.print(iarr[1][3] + " ");
System.out.print(iarr[1][4] + " ");
System.out.println();
System.out.print(iarr[2][0] + " ");
System.out.print(iarr[2][1] + " ");
System.out.print(iarr[2][2] + " ");
System.out.print(iarr[2][3] + " ");
System.out.print(iarr[2][4] + " ");
System.out.println();
/* 2-2 반복문을 이용하여 값 대입 후 출력 */
int value = 1;
for (int i = 0; i < iarr.length; i++) {
for (int j = 0; j < iarr[i].length; j++) {
iarr[i][j] = value++;
System.out.print(iarr[i][j] + " ");
}
System.out.println();
}
}
}
- 출력값
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
2차원 가변배열을 선언 및 할당하여 사용할 수 있다
- 배열의 선언 및 할당
- 가변 배열의 경우 각 인덱스별 배열을 따로 할당을 해야만 한다
- 선언과 동시에 모든 배열을 할당할 수 없으며 할당할 배열의 갯수만 지정하고 각 인덱스에 서로 다른 길이의 배열을 따로 할당해야 한다
- 자료형[][] 변수명 = new 자료형[할당할 배열의 갯수][];
- 변수명[배열인덱스] = new 자료형[배열의 길이];
package section02.demensinal;
public class Application3 {
public static void main(String[] args) {
/* 1-1 주소를 관리하는 배열 주소를 보관하기 위한 변수 선언 */
int[][] iarr = new int[3][];
/* 1-2. 주소를 관리하는 배열의 각 인덱스마다 배열을 할당하여 주소값에 대입 */
iarr[0] = new int[3];
iarr[1] = new int[2];
int[] arr = new int[5]; // 미리 할당해둔 배열을 이용해서도 활용할 수 있다.
iarr[2] = arr;
iarr[0][0] = 1;
iarr[0][1] = 2;
iarr[0][2] = 3;
iarr[1][0] = 4;
iarr[1][1] = 5;
iarr[2][0] = 6;
iarr[2][1] = 7;
iarr[2][2] = 8;
iarr[2][3] = 9;
iarr[2][4] = 10;
System.out.print(iarr[0][0] + " ");
System.out.print(iarr[0][1] + " ");
System.out.print(iarr[0][2] + " ");
System.out.println();
System.out.print(iarr[1][0] + " ");
System.out.print(iarr[1][1] + " ");
System.out.println();
System.out.print(iarr[2][0] + " ");
System.out.print(iarr[2][1] + " ");
System.out.print(iarr[2][2] + " ");
System.out.print(iarr[2][3] + " ");
System.out.print(iarr[2][4] + " ");
System.out.println();
for (int i = 0; i < iarr.length; i++) {
for (int j = 0; j < iarr[i].length; j++) {
System.out.print(iarr[i][j] + " ");
}
System.out.println();
}
}
}
- 출력값
1 2 3
4 5
6 7 8 9 10
1 2 3
4 5
6 7 8 9 10
2차원 배열의 선언과 할당 및 초기화를 동시에 할 수 있다
- 2차원 배열도 할당과 동시에 기본값 외에 값으로 초기화 하고 싶은 경우 리터럴을 이용할 수 있다
- 선언과 할당을 하며 초기화
package section02.demensinal;
public class Application4 {
public static void main(String[] args) {
/* 1-1. 정변배열 */
int[][] iarr = { {1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15} }; // == int[3][5] 같의 의미이지만 조건문에 넣으면 안됨
for(int i = 0; i < iarr.length; i++) {
for(int j = 0; j < iarr[i].length; j++) {
System.out.print(iarr[i][j] + " ");
}
System.out.println();
}
/* 1-2. 가변배열 */
int[][] iarr2 = { {1,2,3,4},{5,6,7},{8,9,} };
for(int i = 0; i < iarr2.length; i++){
for(int j = 0; j < iarr2[i].length; j++) {
System.out.print(iarr2[i][j] + " ");
}
System.out.println();
}
/*1-3 미리 할당한 배열을 이용한 방식 */
int[] arr1 = {1,2,3,4,5};
int[] arr2 = {6,7,8,9,10};
int[][] iarr3 ={arr1,arr2};
for(int i = 0; i < iarr3.length; i++) {
for (int j = 0; j < iarr3[i].length; j++) {
System.out.print(iarr3[i][j] + " ");
}
System.out.println();
}
}
}
- 출력값
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
1 2 3 4
5 6 7
8 9
1 2 3 4 5
6 7 8 9 10
요약. 다차원 배열은 여러 차원을 가진 배열로, 각 요소가 배열인 배열입니다
오늘은 오늘의 해가 뜬다!! 내일도 내일의 해가 뜬다!!
댓글 남기기