본문 바로가기
Java

[Java] 2차원 배열

by seonggu 2023. 3. 28.

1️⃣ 2차원 배열의 선언과 인덱스

2차원 배열을 선언하는 방법은 1차원 배열과 같다. 다른 점은 괄호[]가 하나 더 들어간다.

이때, 3차원이상의 고차원 배열의 선언은 대괄호[]의 개수를 차원의 수만큼 추가해 주기만 하면 됨.

 

2차원 배열은 테이블 형태의 데이터를 담는 데 사용된다. 만약 4행 5열의 데이터를 담기 위한 배열을 생성하려면

int[][] score = new int[4][5]; //4행 5열의 2차원 배열을 생성함

위의 코드가 수행되면 아래처럼 4행 5열의 데이터, 모두 20개의 int 값을 저장할 수 있는 공간이 마련됨.

아래의 그림엔 int로 되어있지만 기본값인 0이 저장된다. 배열을 생성하면, 배열의 각 요소에는 배열요소타입의 기본값이 자동적으로 저장된다.

 

2차원 배열의 index

2차원 배열은 행과 열로 구성되어 있기 때문에 index도 행과 열에 각각 하나씩 존재함.

행index의 범위는 0~행의 길이-1

열index의 범위는 0~열의 길이-1

그리고 2차원 배열의 각 요소에 접근하는 방법은 배열이름[행index][열index]이다.

 

예시로 배열 score의 1행 1열에 100을 저장하고, 이 값을 출력하려면 아래와 같이 하면 된다.

score[0][0] = 100;	// 배열 score의 1행 1열에 100을 저장
System.out.println(score[0][0]); // 배열 score의 1행 1열의 값을 출력

 

2️⃣ 2차원 배열의 초기화

2차원 배열도 괄호 {}를 사용해서 생성과 초기화를 동시에 할 수 있다.

1차원 배열보다 괄호{}를 한번 더 써서 행별로 구분한다. 2)번과 같이 줄 바꿈을 하면 보기도 좋고 이해하기 쉽다.

1) int[][] arr = new int[][] { {1, 2, 3},{4, 5, 6} };

2) int[][] arr = new int[][] {
				{1, 2, 3},
				{4, 5, 6}
				};

위 그림은 2차원 배열 score가 메모리에 어떤 형태로 만들어지는지 나타낸 것이다. (5행 3열)

그림에서 알 수 있듯 2차원 배열은 배열의 배열로 구성되어 있다. 

 

그러면, score.length의 값은 얼마일까?

배열 참조변수 score가 참조하고 있는 배열의 길이가 얼마인가를 세어보면 된다. 하여서 정답은 5이다.

그리고 score[0].length는 배열 참조변수 score[0]이 참조하고 있는 배열의 길이이기 때문에 3이다.

 

for문을 이용해서 2차원 배열을 초기화해보자

int[][] score = new int[4][3];
for (int i=0; i < score.length; i++) {
	for(int j=0; j < score[i].length; j++) {
    	score[i][j] = 10;
        }
}

위 코드는 2차원 배열 score의 모든 요소를 10으로 초기화한다.

 

for문을 이용해서 입력받은 값들로 2차원 배열을 초기화해보자

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenzier(br.readLine());

int N = Integer.parseInt(st.nextToken());
int[][] score = new int[N+1][N+1];

for (int i=1; i <= N; i++) {
	st = new StringTokenizer(br.readLine());
	for(int j=1; j <= N; j++) {
    	score[i][j] = Integer.parseInt(st.nextToken());
        }
}

 

 

 

 

참고자료 -

'Java' 카테고리의 다른 글

[Java] 자바로 프로그램 작성하기  (0) 2023.04.06
[Java] 가변배열  (0) 2023.03.30
[Java] 객체지향언어, 클래스, 객체 정리  (4) 2023.01.05
[Java] JVM 메모리 구조  (0) 2022.12.29
[Java] String배열  (0) 2022.12.27