2차원 배열이란 배열의 요소로 1차원 배열을 가지는 배열로, 자바에서는 2차원 배열을 나타내는 타입을 따로 제공하지 않는다. 대신에 1차원 배열의 배열 요소로 또 다른 1차원 배열을 사용하여 2차원 배열을 나타낼 수 있다.
✔️ 선언
int[][] arr1;
int arr2[][];
int[] arr3[];
✔️ 생성
// 3행 2열의 2차원 배열
arr1 = new int[3][2];
✔️ 데이터 입력
arr1[0][0] = 10;
arr1[0][1] = 20;
arr1[1][0] = 30;
arr1[1][1] = 40;
arr1[2][0] = 50;
arr1[2][1] = 60;
✔️ 출력
public class ArrayEx10 {
public static void main(String[] args) {
// 선언, 생성, 초기화
int[][] arr1 = new int[][] {{10,20,}, {30, 40}, {40, 50}};
int[][] arr2 = {{10,20,}, {30, 40}, {40, 50}};
System.out.println( arr1[0][1]);
System.out.println( arr1[2][1]);
System.out.println("arr1 : " + arr1); // 주소값 출력
System.out.println("arr1[0] : " + arr1[0]); // 주소값 출력
System.out.println("arr1[0][0] : " + arr1[0][0]);
// 행의 개수
System.out.println("arr1.length : " + arr1.length);
// 열의 개수
System.out.println("arr1[0].length : " + arr1[0].length);
// 전체 데이터 출력
// for
// 행 전체에 접근
for (int i = 0; i < arr1.length; i++) {
// 각 행에 대한 접근
for (int j = 0; j < arr1[i].length; j++) {
System.out.println(arr1[i][j]);
}
}
// 향상된 for문
for (int[] cols : arr1) {
for (int data : cols) {
System.out.println(data);
}
}
}
}
public class ArrayEx11 {
public static void main(String[] args) {
// 3차원 배열
int[][][] arr1 = new int[3][2][3];
int[][][] arr2 = {
{
{1, 2, 3},
{10, 20, 30}
},
{
{4, 5, 6},
{40, 50, 60}
},
{
{7, 8, 9},
{40, 50, 60}
}
};
System.out.println(arr2[0][0][0]);
System.out.println(arr2[1][1][1]);
// 기존 for문을 이용해서 전체 데이터 출력
for (int i = 0; i < arr2.length; i++) {
for (int j = 0; j < arr2[i].length; j++) {
for (int k = 0; k < arr2[i][j].length; k++) {
System.out.println(arr2[i][j][k]);
}
}
}
}
}
2차원 이상의 다차원 배열에서는 내부 배열의 길이가 서로 달라도 된다.
각 내부 배열은 서로 다른 길이를 가질 수 있으며, 배열의 "행"은 동일하지만, 각 행의 "열"은 다르게 지정할 수 있다. 이는 2차원 배열에서 열의 개수를 자유롭게 설정할 수 있다는 뜻이다.
즉, 행만 선언하고 열의 개수를 나중에 임의로 지정할 수 있는 구조로, 배열의 각 행이 서로 다른 크기를 가질 수 있는 유연한 형태이다.
public class ArrayEx12 {
public static void main(String[] args) {
// 가변 배열
int[][] arr1 = new int[3][];
arr1[0] = new int[3];
arr1[1] = new int[2];
arr1[2] = new int[1];
arr1[0][0] = 10;
arr1[2][0] = 20;
System.out.println(arr1[0][0]);
System.out.println(arr1[2][0]);
int[][] arr2 = {{10, 20, 30}, {40, 50}, {60}};
System.out.println(arr2[0][0]);
System.out.println(arr2[2][0]);
}
}