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 |