기존 일차원 배열의 경우에는 아래와 같은 형식으로 선언하였다.
ex)
int[] myArray1 = {1,2,3,4,5};
char[] myArray2 = {'a','b','c','d','e'};
다차원 배열의 경우에는 각 차원에 따라서 []의 개수를 맞춰주자
ex)
int[][] myArray3 = {{1,2,3},{4,5,6}}; //2차원 배열
int[][][] myArray4 = {{{1,2}, {3,4}}, {{5,6},{7,8}}};
많이 써봐야 최소 3차원배열까지가 자주쓰이고, 그 이상의 차원은 잘 쓰이지 않는다.
그중에서도, 특히 2차원 배열의 경우는 우리가 앞으로 많이 사용해야 하므로, 2차원 배열에 대해서 중점적으로 다뤄보자.
이차원 배열의 생성방법
c/c++와 마찬가지로 Java또한 행 우선 저장(row major storage)를 따르고 있다.
즉, '다차원 배열을 메모리에 저장하는 순서는 마지막 index가 변하는 순서이다.' 라고 기억해두면 좋을 것 같다.
즉 위의 코드는
1,2,3
4,5,6
이렇게 저장된다.
열 우선 저장을 지향하는 언어가 무엇이 있을까 고민이되어, 구글링을 해본결과...
대표적인 언어로는 fortran을 발견하였다.
fortran은 듣기만 하였지, 아직 제대로 사용해본적은 없어서, 마냥 신기하기만 하였따..
그렇다면, 다차원 배열을 이용해서 풀 수 있는 예제를 하나 풀어보자.
Q1. 아래와 같이 3x3 행렬이 2차원 배열로 초기화 되어있다.
모든 원소를 1로 변경하고, 대각 원소는 10으로 변경하고
각 원소를 출력하시오.
int [][] testArray1 = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}};
소스코드
public class Main {
public static void main(String[] args) {
int [][] testArray1 = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}};
System.out.println(testArray1.length);
for (int i = 0 ; i < testArray1.length ; i++) {
for (int j = 0 ; j < testArray1[i].length ; j++) {
if (i == j)
testArray1[i][j] = 10;
else
testArray1[i][j] = 1;
}
}
for (int i = 0 ; i < testArray1.length ; i++) {
for (int j = 0; j < testArray1[i].length; j++) {
System.out.println(testArray1[i][j]);
}
}
}
}
출력
10
1
1
1
10
1
1
1
10
어렵지않은 매우 간단한 문제이다.
다만, 본인의 경우에는 Java문법에 대해서 아직 미숙한지라, 로직보다는, 문법에서 매우 많은 수정이 있었던것 같다.
특히, 아직도 다차원배열에서의 []를 계속 까먹고 빼서쓴다ㅡㅡ
앞으로 Java를 몸에 익혀서 빨리 익숙해져야겠다.