Minwoo Dev.

[Java] 다차원 배열 본문

Java

[Java] 다차원 배열

itisminu 2023. 11. 15. 18:30
728x90
반응형
SMALL

행렬을 배워본 적이 있는가 ?

요즘 교육과정에서는 배우지 않지만, 행렬은 수 또는 다항식 등을 직사각형 모양으로 배열한 것이다.

4 x 4 행렬

행렬의 각 값은 행렬의 i,j 로 나타낼 수 있다.

위 행렬의 이름이 A라고 할 때, 아래 사진처럼 각 위치별 값을 나타낼 수 있다.

사진을 보면, 가로 줄인 행(row)마다 앞의 수인 i 가 같고, 세로 줄인 열(column)마다 뒤의 수인 j가 같은 것을 알 수 있다.

 

다차원 배열이 행렬의 개념과 굉장히 비슷하다.

1차원 배열의 모습

이전에 배웠던 배열(일차원 배열)은 가로로 긴 한줄짜리의 값 묶음이라면, 다차원 배열 중 이차원 배열은 행렬과 같이 2차원 상에 나타나지는 값들인 것이다.

2차원 배열의 형태

컴퓨터는 인덱싱을 0부터 하므로, 2차원 배열의 각 위치를 나타내면 위와 같다.

 

우리는 이 2차원 배열을 Java로 만들어 볼 것이다.

활쏘기 체험장에서 사각형 모양의 과녁에 활을 맞추는 상황이라고 하자. 

과녁에는 점수들이 표시되어 있을 것이다.

8 8 8 8 8
8 9 9 9 8
8 9 10 9 8
8 9 9 9 8
8 8 8 8 8

위처럼 과녁을 표시하게 2차원 배열을 만들어 보겠다.

public class test {
    public static void main(String[] args) {
        int[][] scores = {
                {8,8,8,8,8},
                {8,9,9,9,8},
                {8,9,10,9,8},
                {8,9,9,9,8},
                {8,8,8,8,8}
        };
    }
}

 

위에서 10점을 출력하려면 좌표를 어떻게 설정해야 하겠는가 ?

3번째 행의 3번째 열이니 3,3라고 생각한다면 틀렸다.

"컴퓨터는 0부터 인덱싱한다."

따라서 10의 위치는 2,2 이다.

public class test {
    public static void main(String[] args) {
        int[][] scores = {
                {8,8,8,8,8},
                {8,9,9,9,8},
                {8,9,10,9,8},
                {8,9,9,9,8},
                {8,8,8,8,8}
        };

        System.out.println(scores[2][2]);

    }
}

 

배열 안의 값들을 for문을 이용하여 모두 출력하는 것을 해보겠다.

 

public class test {
    public static void main(String[] args) {
        int[][] scores = {
                {8,8,8,8,8},
                {8,9,9,9,8},
                {8,9,10,9,8},
                {8,9,9,9,8},
                {8,8,8,8,8}
        };

        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++) {
                System.out.print(scores[i][j]+"\t");
            }
            System.out.println();
        }

    }
}

 

2차원 배열은 이중 반복문을 사용하여 출력할 수 있다. scores[i][j] 뒤에  "\t"를 해준 이유는 그냥 print로 출력하면 다음 값이 바로 붙어서 출력되기 때문에 공백 문자인 \t를 사용하여 출력했다.

그리고 for문이 끝나고 나서 줄바꿈을 위한 println을 한번 실행해주었다.

 

깔끔하게 잘 출력된 것을 알 수 있다.

만약, 배열의 행과 열의 크기를 모른다면, 우리는 이중반복문을 사용하여 출력하는 데 어려움이 있을 것이다.

그럴 때, length를 사용하게 될텐데, 이중 반복문에서는 어떻게 사용해야 행의 길이와 열의 길이를 출력하는지 헷갈릴거라 생각한다.

 

public class test {
    public static void main(String[] args) {
        int[][] scores = {
                {8,8,8},
                {8,9,9,9,8},
                {8,9,10,9,8},
                {8,9,8},
                {8,8,8,8,8}
        };

    }
}

우선, 2차원 배열은 1차원 배열의 묶음으로 볼 수 있다.

첫번째 for문의 i 범위는 행의 개수에 해당한다. 

행의 개수는 2차원 배열에 바로 length를 하면 된다. 

열의 개수인 j의 범위는 scores[i].length를 해야한다.

i행의 각 열의 개수를 의미한다.

 

이렇게 하는 이유는 위처럼 각 행이 열의 개수가 다를 수 있기 때문이다.

위 코드에서 scores[0][4]를 출력하려 한다면, 값이 없기 때문에 에러가 일어날 것이다.

public class test {
    public static void main(String[] args) {
        int[][] scores = {
                {8,8,8},
                {8,9,9,9,8},
                {8,9,10,9,8},
                {8,9,8},
                {8,8,8,8,8}
        };

        System.out.println(scores[0][4]);

    }
}

 

 

 

그리고 나서 값을 편집할 때는 각 값에 대입하는 방식으로 편집할 수 있다.

 

public class test {
    public static void main(String[] args) {
        int[][] scores = {
                {8,8,8,8,8},
                {8,9,9,9,8},
                {8,9,10,9,8},
                {8,9,8,9,8},
                {8,8,8,8,8}
        };

        scores[2][3] = 0;

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

    }
}

 

 

 

 

3차원 배열부터는 실제로 잘 사용하지 않는다. 

2차원 배열의 행과 열에 대한 개념을 잘 익혀두자.

728x90
반응형
LIST

'Java' 카테고리의 다른 글

[Java] 메서드 , 메소드  (0) 2023.11.16
[Java] 퀴즈 5 . 구매 가능 신발 사이즈 옵션  (0) 2023.11.15
[Java] 배열 기본  (0) 2023.11.15
[Java] 퀴즈 4. 주차 요금 정산 프로그램  (0) 2023.11.14
[Java] Continue문  (2) 2023.11.14