본문 바로가기

Programming/Java

[Java] 2차원 배열의 행(row) 길이와 열(column) 길이

반응형

arrayTest.java

public class arrayTest {
    public static void main(String[] args) {
        
        int[][] arr = new int[3][4];
        System.out.println(arr.length); // 행의 개수
        System.out.println(arr[0].length); // 첫 번째 행의 열의 길이

    }
}

int[][] arr = new int[3][4]; 으로 선언한 3행 4열의 2차원 배열 arr을 시각화 시키면 아래 이미지와 같다.

 

행(row)의 길이는 행의 개수와 같다. 따라서 arr.length의 결과는 3이 출력된다. 언뜻 '행의 길이'라고 하면 4를 떠올릴 수 있다. 하지만 그것은 열(column)의 길이다. arr.length의 결과가 행의 개수로 리턴되는 이유는, 행마다 열의 개수가 다를 수 있기 때문이다. 위 이미지는 행마다 일정하게 4개의 열이 있지만, 경우에 따라 1행에는 2개의 열, 2행에는 5개의 열이 있을 수 있다. 따라서 arr.length의 결과가 열의 길이로 리턴될 수 없다.

 

열(column)의 길이는 '어떤 행'의 열의 개수와 같다. 어떤 행의 열의 개수를 구할지 배열의 인덱스 값으로 지정해야 한다. 배열의 인덱스는 0부터 시작되므로 첫 번째 행의 열의 길이는 arr[0].length를 통해 확인할 수 있다. 4가 출력된다.

'길이'라는 개념으로 접근하다 보니 직관적으로 열의 길이가 3이 아닌가 하는 의문이 있었지만, 직접 코드를 실행해 보면 그렇지 않다는 것을 확인할 수 있었다. 만약 열의 길이가 3이라면 4번째 열의 길이를 구할 수 있어야 한다. 그렇게 arr[3].length를 실행하면 다음과 같은 에러가 발생한다.

 

public class arrayTest {

    public static void main(String[] args) {
        
        int[][] arr = new int[3][4];
        System.out.println(arr.length);
        System.out.println(arr[3].length); // 에러 발생
        
    }
}

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3

 

배열의 길이를 초과했기 때문에 에러가 발생했다. arr[3].length는 '4번째 행의 열의 개수'를 반환하는데, 4번째 열은 존재하지 않는다.

 

참고

https://www.codingrooms.com/blog/2d-array-length-java/

 

Coding Rooms - 2D Array Length Java

Learn how to get the length of a 2D array in Java

www.codingrooms.com

반응형

'Programming > Java' 카테고리의 다른 글

[Java] Enum 클래스  (0) 2021.11.18
[Java] StringBuilder 클래스  (0) 2021.10.01
[Java] for문 동작 순서  (0) 2021.09.25
[Java] 클래스 생성자 선언 시 사용되는 this와 this()  (0) 2021.09.16
[Java] main 메소드  (0) 2021.09.09