선언 방법
타입[][] 변수이름; 타입 변수이름[][]; 타입[] 변수이름[];
int[][] score = new int[4][3]; // 4행 3열의 2차원 배열을 생성한다.
int[][] score = new int[4][3]; // 4행 3열의 2차원 배열 score를 생성
1차원 배열보다 괄호{}를 하나 더 써서 행별로 구분해준다.
int[][] arr = new int[][] {{1,2,3}, {4,5,6}}; int[][] arr = {{1,2,3}, {4,5,6}}; // new int[][]가 생략됨
public class ArrayEx6 {
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);
}
}
2차원 이상의 다차원 배열을 생성할 때 전체 배열 차수 중 마지막 차수의 길이를 지정하지 않고, 추후에 각기 다른 길이의 배열을 생성함으로써 고정된 형태가 아닌 보다 유동적인 가변 배열을 구성할 수 있다.
int [][] score = new int[3][]; // 두 번째 찯원의 길이는 지정하지 않는다. score[0] = new int[3]; score[1] = new int[3]; score[2] = new int[2]; // 각 행마다 다른 길이의 배열을 생성하는 것이 가능하다.
가변배열 역시 중괄호{}를 이용해서 다음과 같이 생성과 초기화를 동시에 하는 것이 가능하다.
int[][] score = {
{100, 100, 100}
, {20, 20, 20}
, {30, 30,}
};
public class MultiArrEx1 {
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; //m1의 행 길이
final int COL = m2[0].length; // m2의 열 길이
final int M2_ROW = m2.length; // m2의 행 길이
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();
}
}
}
참고서적
자바의 정석(저자: 남궁성)
지금까지 한 내용 중 배열이 제일 어렵다. 특히 다차원 배열을 활용해 문제를 푸는 부분이 어렵다.
더 많은 연습이 필요할 것 같다. 자바 어느정도 다 나가면 백준으로 연습해야지..
다음 내용부터는 드디어 객체지향 프로그래밍에 들어간다!
파이썬을 공부하면서 겉핥기식으로 공부했었는데 드디어 제대로 공부한다는 생각에 설렌다! 😃