2차원 배열
- 1차원 배열 안에 다른 배열을 넣은 것이다.
- 배열은 저장된 값마다 인덱스 번호 두 개로 설정되고 앞 번호는 행, 뒷 번호는 열이다.([0][0])
- arr[] → 하나의 주소값을 가지고 있는 공간
선언과 할당
- 자료형[][] 변수명;
- 변수명 = new int[a][b];
- 변수명 = new int[a][]
- 자료형[][] 변수이름 = new 자료형[행크기][열크기];
int[][] iarr1; int iarr2[][];
정변 배열
iarr1 = new int[3][5]; //배열의 레퍼런스를 보관하는 배열은 반드시 크기를 지정해 줘야 한다. /*iarr2 = new int[][];*/ //에러남 /*iarr2 = new int[][5];*/ //에러남 iarr2 = new int[3][]; iarr2[0] = new int[5]; iarr2[1] = new int[5]; iarr2[2] = new int[5];
가변 배열
- 자료형이 같은 1차원 배열을 여러 개 하나로 묶은 것이 2차원 배열이기 때문에
묶어있는 1차원 배열의 길이가 꼭 같을 필요는 없다.
int[][] iarr = new int[3][]; //레퍼런스를 보관하는 배열이 아무 주소를 참조하고 있지 않기 때문에 //NullPointerException 발생! /*printArray(iarr);*/ iarr[0] = new int[5]; iarr[1] = new int[3]; iarr[2] = new int[10];
인덱스를 이용한 값 기록
- 배열을 선언하고 할당한 뒤, 인덱스로 접근해서 값을 기록할 수 있다.
int[][] iarr = new int[3][5]; //이중 for문을 이용한 값 기록 int value = 1; //value가 0이면 for(int i = 0; i < iarr.length; i++) { for(int j = 0; j < iarr[i].length; j++) { iarr[i][j] = value++; //++value } }
선언과 동시에 사용자 초기화
- 다차원 배열의 할당과 초기화를 동시에 할 수도 있다.
- 자료형[][] 변수명 = {};
int[][] iarr = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}}; int[][] iarr2 = {{1, 2, 3}, {4, 5, 6, 7, 8, 9}, {10, 11, 12, 13, 14}};
2차원 배열 구조
- 선언을 하게 되면 stack에 레퍼런스 변수가 생성된다.
- heap영역에 2차원배열을 할당한다.
int[][] arr; arr = new int[3][]; arr[0] = new int[5]; arr[1] = new int[4]; arr[2] = new int[6];
| Stack | heap |
| int[][] [ 0x1234 ]arr |
0x1234 [ 0x000 ] 0x000 [ 0 | 1 | 2 | 3 | 4 ] [ 0x111 ] 0x111 [ 0 | 1 | 2 | 3 ] [ 0x222 ] 0x222 [ 0 | 1 | 2 | 3 | 4 | 5 ] |
printArray 메소드
- 이차원 배열을 전달받아 출력하는 기능을 제공하는 메소드
- 공통적인 부분을 추출해서 재사용할 수 있도록 함
- printArray(인자); 로 호출한다. 인자 = 값
- public void printArray(매개변수) 매개변수 = 공간 //변수선언과 동일
→ 인자를 매개변수에 넣어준다. (메소드에 값을 넣어서 호출해준다.)
→ int[][] iarr = iarr <- 얕은복사
printArray(iarr); //iarr은 주소값을 가지고 있다. } //기존에 iarr이 가지고 있던 값을 출력해준다. public void printArray(int[][] iarr) { //주소값을 넘겨준다. for(int i = 0; i < iarr.length; i++) { for(int j = 0; j < iarr[i].length; j++) { System.out.print(iarr[i][j]); if(j != iarr[i].length - 1) { System.out.print(", "); } } System.out.println(); } }
'JAVA > 이론 정리 및 예제' 카테고리의 다른 글
| [JAVA/자바] #6_1 객체지향언어 / 예제 (0) | 2021.09.14 |
|---|---|
| [JAVA/자바] #5_2 mainArgument (0) | 2021.09.14 |
| [JAVA/자바] #4_4 배열 실습문제 (0) | 2021.09.14 |
| [JAVA/자바] #4_3 배열 실습문제 (0) | 2021.09.14 |
| [JAVA/자바] #4_2 배열 / 예제 (0) | 2021.09.14 |