다차원 배열
자바의 다차원 배열은 특별한 구조를 가지고 있습니다.
2차원 배열
2차원 배열의 선언과 생성
1차원 배열과 마찬가지로 2차원 배열에서도 레퍼런스 변수 선언 후 배열을 생성합니다.
2차원 배열의 레퍼런스 변수를 선언하는 방법은 다음 두가지가 있습니다.
int intArray [][];
char charArray [][];
double doubleArray [][];
또는
int [][] intArray;
char [][] charArray;
double [][] doubleArray;
2차원 배열의 저장 공간은 다음과 같이 new 연산자를 이용하여 생성하며, 첫 번째 []는 행의 개수를, 두 번째 []는 열의 개수를 나타낸다.
intArray = new int [2][5]; // 2행 5열의 2차원 배열 생성
charArray = new char[5][5]; // 5행 5열의 2차원 배열 생성
doubleArray = new double [5][2]; // 5행 2열의 2차원 배열 생성

2차원 배열의 length 의미를 살펴보면 다음과 같습니다.
- i.length -> 2차원 배열의 행의 개수, 2
- i[0].length -> 0번째 행에 있는 열의 개수, 5
- i[1].length -> 1번째 행에 있는 열의 개수, 5
2차원 배열도 다음과 같이 레퍼런스 변수 선언과 배열 생성을 동시에 할 수 있습니다.
int intArray [][] = new int[2][5];
char charArray [][] = new char[5][5];
double doubleArray [][] = new double[5][2];
2차원 배열의 초기화
2차원 배열을 선언할 때 각 원소를 초기화할 수 있습니다. 그러면 자동으로 원소 개수만큼 배열 공간이 할당되고, 원소 값으로 초기화됩니다.
int intArray[][] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}}; // 3x3 배열 생성
char charArray[][] = {{'a', 'b', 'c'}, {'d', 'e', 'f'}}; // 2x3 배열 생성
double doubleArray[][] = {{0.01, 0.02}, {0.03, 0.04}}; // 2x2 배열 생성
2차원 배열로 4년 평점 구하기
public class ScoreAverage {
public static void main(String[] args) {
double score[][] = {{3.3, 3.4}, // 1학년 1, 2학기 평점
{3.5, 3.6}, // 2학년 1, 2학기 평점
{3.7, 4.0}, // 3학년 1, 2학기 평점
{4.1, 4.2}
}; // 4학년 1, 2학기 평점
double sum = 0;
for (int year = 0; year < score.length; year++) // 각 화면 별로 반복
for (int term = 0; term < score[year].length; term++) // 학기별로 반복
sum += score[year][term]; // 전체 평점 합
int n = score.length; // 배열의 행 개수, 4(4학년)
int m = score[0].length; // 배열의 열 개수 2(2학기)
System.out.println("4년 전체 평점 평균은 " + sum / (n * m));
}
}
실행 결과
4년 전체 평점 평균은 3.725
비정방향 배열
정방형 배열은 각 행의 열 개수가 모두 동일한 패턴을 말하며, 비정방형 배열은 행마다 열의 개수가 서로 다른 배열을 말합니다.


비정방향형 배열은 다음 코드로 작성합니다.
int i [][]; // 2차원 배열의 레퍼런스 변수 i 선언
i = new int[4][]; // 각 행을 가리키는 레퍼런스 배열 생성
i[0] = new int [1]; // 첫째 행의 1개 크기의 배열 생성
i[1] = new int [2]; // 둘째 행의 2개 크기의 배열 생성
i[2] = new int [3]; // 셋째 행의 3개 크기의 배열 생성
i[3] = new int [4]; // 넷째 행의 4개 크기의 배열 생성
length 필드의 의미
- i.length -> 2차원 배열의 행의 개수, 4
- i[0].length -> 0번째 행의 열의 개수, 1
- i[1].length -> 1번째 행의 열의 개수, 2
- i[2].length -> 2번째 행의 열의 개수, 3
- i[3].length -> 3번째 행의 열의 개수, 4
어떤 메서드가 배열을 매개변수로 받을 때, 배열이 정방향형인지는 표시되지 않기 때문에 항상 length 필드를 사용하여 각 행의 열의 개수를 파악하여야 합니다.
배열 생성 시에 초기화를 통해 비정방향형 배열을 생성합니다.
int intArray[][] = { {0}, {1, 2}, {3, 4, 5}, {6, 7, 8, 9} };
비정방형 배열의 생성과 접근
public class SkewedArray {
public static void main(String[] args) {
int intArray[][] = new int[4][]; // 각 행의 레퍼런스 배열 생성
intArray[0] = new int[3]; // 첫째 행의 정수 3개의 배열 생성
intArray[1] = new int[2]; // 둘째 행의 장수 2개의 배열 생성
intArray[2] = new int[3]; // 셋쩨 행의 정수 3개의 배열 생성
intArray[3] = new int[2]; // 넷째 행의 정수 2개의 배열 생성
for (int i = 0; i < intArray.length; i++) // 행에 대한 반복
for (int j = 0; j < intArray[i].length; j++) // 열에 대한 반복
intArray[i][j] = (i + 1) * 10 + j;
for (int i = 0; i < intArray.length; i++) {
for (int j = 0; j < intArray[i].length; j++) {
System.out.print(intArray[i][j] + " ");
}
System.out.println(); // 다음 줄로 넘어가기
}
}
}
실행 결과
10 11 12
20 21
30 31 32
40 41
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
| main() 메소드 (1) | 2025.01.27 |
|---|---|
| 메소드에서 배열 리턴 (0) | 2025.01.26 |
| 배열 (0) | 2025.01.25 |
| continue문과 break 문 (1) | 2025.01.25 |
| 반복문 (0) | 2025.01.24 |