프로그래밍 언어/JAVA

다차원 배열

· 코딩마이데이

자바의 다차원 배열은 특별한 구조를 가지고 있습니다.

2차원 배열

2차원 배열의 선언과 생성

1차원 배열과 마찬가지로 2차원 배열에서도 레퍼런스 변수 선언 후 배열을 생성합니다.

2차원 배열의 레퍼런스 변수를 선언하는 방법은 다음 두가지가 있습니다.

int intArray [][];
char charArray [][];
double doubleArray [][];

또는

int [][] intArray;
char [][] charArray;
double [][] doubleArray;

 

2차원 배열의 저장 공간은 다음과 같이 new 연산자를 이용하여 생성하며, 첫 번째 []는 의 개수를, 두 번째 []는 의 개수를 나타낸다.

intArray = new int [2][5]; // 2행 5열의 2차원 배열 생성
charArray = new char[5][5]; // 5행 5열의 2차원 배열 생성
doubleArray = new double [5][2]; // 5행 2열의 2차원 배열 생성

 

new int[2][5]에 의해 생성된 2차원 배열의 구조

 

 

2차원 배열의 length 의미를 살펴보면 다음과 같습니다.

  • i.length -> 2차원 배열의 행의 개수, 2
  • i[0].length -> 0번째 행에 있는 열의 개수, 5
  • i[1].length -> 1번째 행에 있는 열의 개수, 5

2차원 배열도 다음과 같이 레퍼런스 변수 선언과 배열 생성을 동시에 할 수 있습니다.

int intArray [][] = new int[2][5];
char charArray [][] = new char[5][5];
double doubleArray [][] = new double[5][2];

 

2차원 배열의 초기화

2차원 배열을 선언할 때 각 원소를 초기화할 수 있습니다. 그러면 자동으로 원소 개수만큼 배열 공간이 할당되고, 원소 값으로 초기화됩니다.

int intArray[][] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}}; // 3x3 배열 생성
char charArray[][] = {{'a', 'b', 'c'}, {'d', 'e', 'f'}}; // 2x3 배열 생성
double doubleArray[][] = {{0.01, 0.02}, {0.03, 0.04}}; // 2x2 배열 생성

 

2차원 배열로 4년 평점 구하기

public class ScoreAverage {
    public static void main(String[] args) {
        double score[][] = {{3.3, 3.4}, // 1학년 1, 2학기 평점
                {3.5, 3.6}, // 2학년 1, 2학기 평점
                {3.7, 4.0}, // 3학년 1, 2학기 평점
                {4.1, 4.2}
        }; // 4학년 1, 2학기 평점
         double sum = 0;
         for (int year = 0; year < score.length; year++) // 각 화면 별로 반복
             for (int term = 0; term < score[year].length; term++) // 학기별로 반복
                 sum += score[year][term]; // 전체 평점 합

        int n = score.length; // 배열의 행 개수, 4(4학년)
        int m = score[0].length; // 배열의 열 개수 2(2학기)
        System.out.println("4년 전체 평점 평균은 " + sum / (n * m));
    }
}

 

실행 결과

4년 전체 평점 평균은 3.725

 

비정방향 배열

정방형 배열은 각 행의 열 개수가 모두 동일한 패턴을 말하며, 비정방형 배열은 행마다 열의 개수가 서로 다른 배열을 말합니다.

4x4 정방향 배열

 

비정방형 배열

 

 

비정방향형 배열은 다음 코드로 작성합니다.

int i [][]; // 2차원 배열의 레퍼런스 변수 i 선언
i = new int[4][]; // 각 행을 가리키는 레퍼런스 배열 생성
i[0] = new int [1]; // 첫째 행의 1개 크기의 배열 생성
i[1] = new int [2]; // 둘째 행의 2개 크기의 배열 생성
i[2] = new int [3]; // 셋째 행의 3개 크기의 배열 생성
i[3] = new int [4]; // 넷째 행의 4개 크기의 배열 생성

 

length 필드의 의미

  • i.length -> 2차원 배열의 행의 개수, 4
  • i[0].length -> 0번째 행의 열의 개수, 1
  • i[1].length -> 1번째 행의 열의 개수, 2
  • i[2].length -> 2번째 행의 열의 개수, 3
  • i[3].length -> 3번째 행의 열의 개수, 4

어떤 메서드가 배열을 매개변수로 받을 때, 배열이 정방향형인지는 표시되지 않기 때문에 항상 length 필드를 사용하여 각 행의 열의 개수를 파악하여야 합니다.

배열 생성 시에 초기화를 통해 비정방향형 배열을 생성합니다.

int intArray[][] = { {0}, {1, 2}, {3, 4, 5}, {6, 7, 8, 9} };

 

 

비정방형 배열의 생성과 접근

public class SkewedArray {
    public static void main(String[] args) {
        int intArray[][] = new int[4][]; // 각 행의 레퍼런스 배열 생성
        intArray[0] = new int[3]; // 첫째 행의 정수 3개의 배열 생성
        intArray[1] = new int[2]; // 둘째 행의 장수 2개의 배열 생성
        intArray[2] = new int[3]; // 셋쩨 행의 정수 3개의 배열 생성
        intArray[3] = new int[2]; // 넷째 행의 정수 2개의 배열 생성

        for (int i = 0; i < intArray.length; i++) // 행에 대한 반복
            for (int j = 0; j < intArray[i].length; j++) // 열에 대한 반복
                intArray[i][j] = (i + 1) * 10 + j;

        for (int i = 0; i < intArray.length; i++) {
            for (int j = 0; j < intArray[i].length; j++) {
                System.out.print(intArray[i][j] + " ");
            }
            System.out.println(); // 다음 줄로 넘어가기
        }
    }
}

 

실행 결과

10 11 12 
20 21 
30 31 32 
40 41 

'프로그래밍 언어 > JAVA' 카테고리의 다른 글

main() 메소드  (1) 2025.01.27
메소드에서 배열 리턴  (0) 2025.01.26
배열  (0) 2025.01.25
continue문과 break 문  (1) 2025.01.25
반복문  (0) 2025.01.24