JAVA_05_2차원 배열

송지윤·2024년 2월 6일

Java

목록 보기
9/22

2차원 배열

자료형이 같은 1차원 배열의 묶음으로 배열 안에 다른 배열이 존재
2차원 배열은 할당된 공간마다 인덱스 번호 두 개 부여(앞 번호는 행, 뒷 번호는 열([0][0]))

1차원 배열 : 변수를 묶음으로 다루는 것
2차원 배열 : 1차원 배열을 묶음으로 다루는 것
3차원 배열 : 2차원 배열을 묶음으로 다루는 것

2차원 배열 선언과 할당

배열 선언

자료형[][] 배열명;
자료형 배열명[][];
자료형[] 배열명[];

int[][] arr;

=> int 2차원 배열을 참조하는 참조변수 arr 선언
참조변수 == 참조형 == 레퍼런스 변수 == 레퍼런스

배열 할당

자료형[][]배열명 = new 자료형[행크기][열크기];

자료형 배열명[][] = new 자료형[행크기][열크기];

자료형[] 배열명[] = new 자료형[행크기][열크기]

ex)
int[][] arr = new int[3][4];
int arr[][] = new intt[3][4];

arr = new int[2][3];

heap 영역에 int 2차원 배열 2행 3열 공간을 할당

2차원 배열 구조

2차원 배열 초기화

인덱스를 이용한 초기화

ex)

arr[0][0] = 1;
arr[1][1] = 2;
arr[0][0] = 10;
arr[0][1] = 20;
arr[0][2] = 30;
		
arr[1][0] = 40;
arr[1][1] = 50;
arr[1][2] = 60;

for문을 이용한 초기화

ex)

for(int i = 0; i < arr.length; i++) {
	for(int j = 0; j < arr[i].length; j++) {
		arr[i][j] = j;
	}
}
int num = 10; // 배열 요소 초기화에 사용할 변수
for(int row = 0; row < arr.length; row++) { // 행 반복 (0,1) 2회 반복
			
	for(int col = 0 ; col < arr[row].length; col++) { // 열 반복 3회 반복
				
	arr[row][col] = num;
	num += 10;
	}		
}

결과값

arr[0][0] = 10;
arr[0][1] = 20;
arr[0][2] = 30;
				
arr[1][0] = 40;
arr[1][1] = 50;
arr[1][2] = 60;

배열 길이
-> 배열명.length 는 변수가 직접 참조하고 있는 배열의 길이를 반환

System.out.println(arr.length); // 2 (행길이)
// arr이 참조하고 있는 2차원 배열의 행의 길이
		
System.out.println(arr[0].length); // 3 (열길이)
		
System.out.println(arr[1].length); // 3 (열길이)
Arrays.toString(배열명)

참조하고 있는 1차원 배열 값을 문자열로 반환

System.out.println("Arrays.toString() : " + Arrays.toString(arr));

결과값
Arrays.toString() : [[I@626b2d4a, [I@5e91993f]

Arrays.deeptoString(배열명)

참조하고 있는 배열의 데이터가 나오는 부분까지 파고 들어가서
모든 값을 문자열로 반환

System.out.println("Arrays.deeptoString() : " + Arrays.deepToString(arr));

결과값
Arrays.deeptoString() : [[10, 20, 30], [40, 50, 60]]

선언과 동시에 초기화

ex)

int[][] arr = {{1, 2, 3, 4}, {5, 6, 7, 8}};
int[][] arr = new int[][] {{1, 2, 3, 4}, {5, 6, 7, 8}};
String fruit[][] = {{"사과", "딸기", "석류"}, {"바나나", "참외", "레몬"}};
int[][] arr = { {1,2,3},
				{4,5,6},
				{7,8,9} };

행 별로 합 출력

출력 예)
0 행의 합 : 6
1 행의 합 : 15
2 행의 합 : 24

for (int row = 0 ; row < arr.length ; row++) { // 행 반복 3번
	int sum = 0;
	for (int col = 0 ; col < arr[row].length ; col++) {
		// 열 반복
		sum += arr[row][col];
		// 첫번째 row 는 0 고정
		// arr[0][0] == 1
		// arr[0][1] == 2
		// arr[0][2] == 3
		// sum == 6
		
		// 두번째 row 는 1 고정
		// arr[1][0] == 4
		// arr[1][1] == 5
		// arr[1][2] == 6
		// sum == 15
		
		// 세번째  row 는 2 고정
		// arr[2][0] == 7
		// arr[2][1] == 8
		// arr[2][2] == 9
		// sum == 24
	}
	System.out.printf("%d행의 합 : %d\n", row, sum);
}

열 별로 합 출력

출력 예)
0열의 합 : 12
1열의 합 : 15
2열의 합 : 18

// col 고정 row 증가
for (int col = 0 ; col < arr.length ; col++) { // 행 반복 3번
	int sum = 0;
	for (int row = 0 ; row < arr[col].length ; row++) {
		// 열 반복
		sum += arr[row][col];
	}
	System.out.printf("%d열의 합 : %d\n", col, sum);
}

가변 배열

다차원 배열 생성 시 마지막 배열차수의 크기를 지정하지 않고 나중에 서로 크기가 다른 배열로 지정한 배열.

가변 배열 할당

2차원 가변 배열

자료형[ ][ ] 배열명 = new 자료형[행크기][ ];

ex)

int[][] arr = new int[4][];

arr[0] = new int[3];
arr[1] = new int[4];
arr[2] = new int[5];
arr[3] = new int[2];

가변 배열 구조

char ch = 'a'; // 문자형
for(int row = 0 ; row < arr.length ; row ++) { // 행
	for (int col = 0 ; col < arr[row].length ; col++) {
		// row 값에 따라 도는 횟수 다름
		arr[row][col] = ch++;
	}
}
System.out.println(Arrays.deepToString(arr));

결과값

[[a, b, c], [d, e, f, g], [h, i, j, k, l], [m, n]]

0개의 댓글