[Java] demensinal array(다차원배열)

Date:     Updated:

카테고리:

태그:

java.png

다차원배열이란?

  • 다차원 배열은 2차원 이상의 배열을 의미한다
  • 배열의 인덱스마다 또 다른 배열의 주소를 보관하는 배열을 의미한다
  • 즉, 2차원 배열은 1차원 배열 여러개를 하나로 묶어서 관리하는 배열을 의미한다
  • 더 많은 차원의 배열을 사용할 수 있지만 일반적으로 2차원 배열보다 높은 차원의 배열은 사용 빈도가 현저희 작다

2차원 배열을 사용하는 방법

  1. 배열의 주소를 보관할 래퍼런스 변수 선언(stack)
  2. 여러개의 1차원 배열의 주소를 관리할 배열을 생성(heap)
  3. 각 인덱스에 관리하는 배열을 할당(heap)하여 주소를 보관하는 배열에 저장
  4. 생성한 여러 개의 일차원 배열에 차례로 접근해서 사용
package section02.demensinal;

public class Application1 {

    public static void main(String[] args) {

        /* 1. 배열의 주소를 보관할 래퍼런스 변수 선언(stack) */
        int[][] iarr;
        int iarr2[][];
        int[] iarr3[];

        /* 2. 여러 개의 1차원 배열의 주소를 관리하는 배열을 생성(heap) */
        /*
         * heap에 공간을 할당할 때 new연산자를 이용한다
         * 배열은 주소를 관리하는 배열의 길이는 앞부분에 정수형으로 표기하여 반드시 크기를 지정해줘야 한다.
         * */

        // iarr = new int[][];      //크기를 지정하지 않으면 에러발생합니다.
        // iarr = new int[][5];        //주소를 묶어서 관리할 배열의 크기를 지정하지 않으면 에러발생
        iarr = new int[3][];


        /* 3. 주소를 관리하는 배열의 인덱스마다 배열을 할당한다. */
        iarr[0] = new int[5];
        iarr[1] = new int[5];
        iarr[2] = new int[5];

        iarr2 = new int[3][5];


        /* 4-1 배열을 하나씩 접근해서 출력하기 */
        for (int i = 0; i < iarr[0].length; i++) {
            System.out.println(iarr[0][i] + " ");

        }
        System.out.println();
        for (int i = 0; i < iarr[1].length; i++) {
            System.out.println(iarr[1][i] + " ");

        }
        System.out.println();
        for (int i = 0; i < iarr[2].length; i++) {
            System.out.println(iarr[2][i] + " ");
        }

        System.out.println();

        System.out.println("iarr.length" + iarr.length);

        for (int i = 0; i < iarr.length; i++) {

            for (int j = 0; j < iarr[i].length; j++) {
                System.out.println(iarr[i][j]);

            }
        }
    }
}
  • 출력값
0 
0 
0 
0 
0 

0 
0 
0 
0 
0 

0 
0 
0 
0 
0 

iarr.length3
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

2차원 청변배열을 선언 및 할당하여 사용할 수 있다

  1. 배열의 선언 및 할당
    • 정변 배열의 경우 각 인덱스별 배열을 따로 할당할 수도 있지만 선언과 동시에 모든 배열을 할당할 수 있다
    • 자료형[][] 변수명 = new 자료형[할당할 배열의 갯수][할당할 배열의 길이]
package section02.demensinal;

public class Application2 {

    public static void main(String[] args) {
    
        int[][] iarr = new int[3][5]; // 길이 5의 배열을 3개 할당하고 그 주소를 묶어 관리하는 배열의 주소를 stack의 iarr에 저장한다.

        /* 2. 각 배열의 인덱스에 접근해서 값 대입 후 출력 */
        /*2-1. 각 인덱스 공간에 하나씩 접근하여 값 대입 후 출력 */

        iarr[0][0] = 1;
        iarr[0][1] = 2;
        iarr[0][2] = 3;
        iarr[0][3] = 4;
        iarr[0][4] = 5;

        iarr[1][0] = 6;
        iarr[1][1] = 7;
        iarr[1][2] = 8;
        iarr[1][3] = 9;
        iarr[1][4] = 10;

        iarr[2][0] = 11;
        iarr[2][1] = 12;
        iarr[2][2] = 13;
        iarr[2][3] = 14;
        iarr[2][4] = 15;


        System.out.print(iarr[0][0] + " ");
        System.out.print(iarr[0][1] + " ");
        System.out.print(iarr[0][2] + " ");
        System.out.print(iarr[0][3] + " ");
        System.out.print(iarr[0][4] + " ");

        System.out.println();

        System.out.print(iarr[1][0] + " ");
        System.out.print(iarr[1][1] + " ");
        System.out.print(iarr[1][2] + " ");
        System.out.print(iarr[1][3] + " ");
        System.out.print(iarr[1][4] + " ");

        System.out.println();

        System.out.print(iarr[2][0] + " ");
        System.out.print(iarr[2][1] + " ");
        System.out.print(iarr[2][2] + " ");
        System.out.print(iarr[2][3] + " ");
        System.out.print(iarr[2][4] + " ");

        System.out.println();


        /* 2-2 반복문을 이용하여 값 대입 후 출력 */
        int value = 1;

        for (int i = 0; i < iarr.length; i++) {

            for (int j = 0; j < iarr[i].length; j++) {
                iarr[i][j] = value++;
                System.out.print(iarr[i][j] + " ");
            }
            System.out.println();
        }

    }
}
  • 출력값
1 2 3 4 5 
6 7 8 9 10 
11 12 13 14 15 
1 2 3 4 5 
6 7 8 9 10 
11 12 13 14 15 

2차원 가변배열을 선언 및 할당하여 사용할 수 있다

  1. 배열의 선언 및 할당
    • 가변 배열의 경우 각 인덱스별 배열을 따로 할당을 해야만 한다
    • 선언과 동시에 모든 배열을 할당할 수 없으며 할당할 배열의 갯수만 지정하고 각 인덱스에 서로 다른 길이의 배열을 따로 할당해야 한다
    • 자료형[][] 변수명 = new 자료형[할당할 배열의 갯수][];
    • 변수명[배열인덱스] = new 자료형[배열의 길이];
package section02.demensinal;

public class Application3 {

    public static void main(String[] args) {

        /* 1-1 주소를 관리하는 배열 주소를 보관하기 위한 변수 선언 */
        int[][] iarr = new int[3][];

        /* 1-2. 주소를 관리하는 배열의 각 인덱스마다 배열을 할당하여 주소값에 대입 */
        iarr[0] = new int[3];

        iarr[1] = new int[2];
        int[] arr = new int[5];       // 미리 할당해둔 배열을 이용해서도 활용할 수 있다.
        iarr[2] = arr;

        iarr[0][0] = 1;
        iarr[0][1] = 2;
        iarr[0][2] = 3;


        iarr[1][0] = 4;
        iarr[1][1] = 5;

        iarr[2][0] = 6;
        iarr[2][1] = 7;
        iarr[2][2] = 8;
        iarr[2][3] = 9;
        iarr[2][4] = 10;

        System.out.print(iarr[0][0] + " ");
        System.out.print(iarr[0][1] + " ");
        System.out.print(iarr[0][2] + " ");

        System.out.println();

        System.out.print(iarr[1][0] + " ");
        System.out.print(iarr[1][1] + " ");

        System.out.println();

        System.out.print(iarr[2][0] + " ");
        System.out.print(iarr[2][1] + " ");
        System.out.print(iarr[2][2] + " ");
        System.out.print(iarr[2][3] + " ");
        System.out.print(iarr[2][4] + " ");

        System.out.println();

        for (int i = 0; i < iarr.length; i++) {

            for (int j = 0; j < iarr[i].length; j++) {
                System.out.print(iarr[i][j] + " ");
            }
            System.out.println();
        }


    }


}
  • 출력값
1 2 3 
4 5 
6 7 8 9 10 
1 2 3 
4 5 
6 7 8 9 10 

2차원 배열의 선언과 할당 및 초기화를 동시에 할 수 있다

  • 2차원 배열도 할당과 동시에 기본값 외에 값으로 초기화 하고 싶은 경우 리터럴을 이용할 수 있다
    1. 선언과 할당을 하며 초기화
package section02.demensinal;

public class Application4 {

    public static void main(String[] args) {
  
        /* 1-1. 정변배열 */
        int[][] iarr = { {1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15} };  // == int[3][5] 같의 의미이지만 조건문에 넣으면 안됨

        for(int i = 0; i < iarr.length; i++) {
            for(int j = 0; j < iarr[i].length; j++) {
                System.out.print(iarr[i][j] + " ");
            }
            System.out.println();
        }

        /* 1-2. 가변배열 */
        int[][] iarr2 = { {1,2,3,4},{5,6,7},{8,9,} };

        for(int i = 0; i < iarr2.length; i++){
            for(int j = 0; j < iarr2[i].length; j++) {
                System.out.print(iarr2[i][j] + " ");
            }
            System.out.println();
        }
        /*1-3 미리 할당한 배열을 이용한 방식 */
        int[] arr1 = {1,2,3,4,5};
        int[] arr2 = {6,7,8,9,10};

        int[][] iarr3 ={arr1,arr2};

        for(int i = 0; i < iarr3.length; i++) {
            for (int j = 0; j < iarr3[i].length; j++) {
                System.out.print(iarr3[i][j] + " ");
            }
            System.out.println();
        }
    }
}
  • 출력값
1 2 3 4 5 
6 7 8 9 10 
11 12 13 14 15 
1 2 3 4 
5 6 7 
8 9 
1 2 3 4 5 
6 7 8 9 10 

요약. 다차원 배열은 여러 차원을 가진 배열로, 각 요소가 배열인 배열입니다

오늘은 오늘의 해가 뜬다!! 내일도 내일의 해가 뜬다!!

Java 카테고리 내 다른 글 보러가기

댓글 남기기