2차원 이상의 배열, 다차원 배열도 선언해서 사용할 수 있다.
2차원 배열의 선언과 인덱스
선언 방법 | 선언 예 |
타입[][] 변수이름: | int[][] score; |
타입 변수이름[][]: | int score[][]; |
타입[]변수이름[] | int[] score[]; |
3차원 이상의 고차원 배열의 선언은 대괄호[]의 개수를 차원 수만큼 추가해 주면 된다.
배열을 생성하면, 요소에는 배열 요소 타입의 기본값이 자동적으로 저장된다.
2차원 배열의 index
2차원 배열은 행(row)와 열(column)으로 구성되어 있기 때문에 index도 행과 열에 각각 하나씩 존재한다.
'행 index'의 범위는 0~행의 길이-1이고, 열의 길이도 마찬가지로 0~열의 길이-1이다.
각 요소에 접근하는 방법은 배열 이름[행 index][열 index]이다.
2차원 배열도 중괄호{}를 사용해서 생성과 초기화를 동시에 할 수 있다. 1차원과 다른 점은 중괄호{}를 한번 더 쓴다는 것이다.
public class ArrayEx18 {
public static void main(String[] args) {
int[][] score = {
{ 100, 100, 100 },
{ 20, 20, 20 },
{ 30, 30, 30 },
{ 40, 40, 40 } };
int sum = 0;
for (int i = 0; i < score.length; i++) {
for (int j = 0; j < score[i].length; j++) {
System.out.printf("score[%d][%d]=%d%n", i, j, score[i][j]);
}
}
for (int[] tmp : score) {
for (int i : tmp) {
sum += i;
}
}
System.out.println("sum=" + sum);
}
}
score[0][0]=100
score[0][1]=100
score[0][2]=100
score[1][0]=20
score[1][1]=20
score[1][2]=20
score[2][0]=30
score[2][1]=30
score[2][2]=30
score[3][0]=40
score[3][1]=40
score[3][2]=40
sum=570
각 좌표별 값과 총합을 나타내는 코드이다.
향상된 for문으로 배열의 각 요소에 저장된 값들을 순차적으로 읽어올 수 있지만, 배열에 저장된 값을 변경할 수는 없다.
가변 배열
2차원 이상의 다차원 배열을 생성할 때 전체 배열 차수 중 마지막 차수의 길이를 지정하지 않고, 추후에 각기 다른길이의 배열을 생성함으로써 고정된 형태가 아닌 보다 유동적인 가변배열을 구성할 수 있다.
int[][] score = new int[5][];
score[0] = new int[4];
score[1] = new int[3];
score[2] = new int[2];
score[3] = new int[2];
score[4] = new int[3];
score.length의 값은5지만 score[0].length는 4, score[1].length는 3으로 서로 다르다.
가변배열도 중괄호{}를 이용해서 생성과 초기화를 동시에 하는것이 가능하다.
다차원 배열의 활용
public class MultiArrEx3 {
public static void main(String[] args) {
int[][] m1 = {
{1, 2, 3},
{4, 5, 6}
};
int[][] m2 = {{1, 2},
{3, 4},
{5, 6}
};
final int ROW = m1.length;
final int COL = m2[0].length;
final int M2_ROW= m2.length;
int[][] m3 = new int[ROW][COL];
// 행렬곱 m1 x m2의 결과를 m3에 저장
for(int i=0;i<ROW;i++)
for(int j=0;j<COL;j++)
for(int k=0;k<M2_ROW;k++)
m3[i][j] += m1[i][k] * m2[k][j];
// 행렬 m3를 출력
for(int i=0;i<ROW;i++) {
for(int j=0;j<COL;j++) {
System.out.printf("%3d ", m3[i][j]);
}
System.out.println();
}
} // main의 끝
}
22 28
49 64
행열의 곱셈을 배열로 표현한 코드이다.