Java/기본 프로그래밍

[JAVA] 다차원 배열 ( 2차원 배열, 비정방형 배열 )

KR_Jimi 2024. 1. 30. 21:41

2차원 배열


  • 자바의 다차원 배열은 C/C++와 달리 독특한 구조를 가진다. (독특한 구조가 무엇인가? 이에 대한 보충이 필요하다.)
  • 배열은 배열에 대한 레퍼런스 변수를 생성하고 배열을 생성한다.
  • length 필드의 사용이 가능하다.

legnth 필드의 의미
-   i.legnth -> 배열의 행의 개수, n //n은 임의의 수

2차원 배열 레퍼런스 변수 선언
int intArray [][];
char charArray [][];
double doubleArray [][];

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

레퍼런스 변수 선과 배열 생성을 동시에
int intArray [][] = new int [2][5];
char charArray [][] = new char [5][5];
double doubleArray  [][] = new double [5][2];

예시


2차원 배열에 학년별로 1, 2학기 성적으로 저장하고, 4년간 전체 평점 평균을 출력하라.


public class ScoreAverage {
    public static void main(String [] args) {
        double score[][] = {{3.3, 3.4}, {3.5,3.6}, {3.7, 4.0}, {4.1, 4.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;
        int m = score[0].length;
        System.out.println("4년 전체 평점 평균은 " +sum/(n*m));


    }
}

실행결과
4년 전체 평점 평균은 3.725

2차원 배열을 선언 및 생성할 때, 첫번째 중괄호 안에 있는 4개의 중괄호가 행이 되고, 각각의 중괄호 안에 있는 요소의 갯수가 열이 된다. for 문을 이용해서 점수를 모두 더할 때, 안쪽 for 문에서 행을 지정하는 것이 중요하다.


비정방형 배열


  • 정방형 배열은 각 행의 열의 개수가 모두 동일한 배열을 말한다.
  • 비정방형 배열은 각 행의 열의 개수가 서로 다른 배열을 말한다.

정방형 배열
1 1 1
1 1 1
1 1 1

비정방형 배열
1 2 3
4
3 7 4 7
3 4 6

예시


다음과 같은 비정방형 배열을 만들어 값을 초기화하고 출력하라.


10 | 11 | 12
20 | 21
30 | 31 | 32
40 | 41


public class SkewdArray {
    public static void main(String[] args) {

        int intArray[][] = new int [4][];
        intArray[0] = new int[3];
        intArray[1] = new int[2];
        intArray[2] = new int[3];
        intArray[3] = new int[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]+"\t");
            }
            System.out.println();
        }
    }
}

실행결과
10    11    12    
20    21    
30    31    32    
40    41    

이중 for 문이 총 두번 나오는데, 둘 다 안 쪽 for 문에서의 조건식 이 매우 매우 중요하다. 배열의 length 필드를 지정할 때 행을 바깥 for 문의 제어변수로 설정하여 각 행의 열을 차례대로 대입하거나 출력할 수 있다.


배열과 for 문을 같이 사용할 때, 행과 열의 관계를 생각하면서 프로그램을 짜는 것이 중요하다.