JAVA/이론 정리 및 예제

[JAVA/자바] #5_1 2차원배열 / 예제

chaewon 2021. 9. 14. 14:34

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();
		}
}