본문 바로가기

JAVA/혼자공부하는자바

[JAVA 기초] 자바 배열 3 (다차원 배열)

728x90

2차원 배열

수학의 행렬과 같은 구조로 가로와 세로로 표가 만들어진다고 생각하자.

 

왼쪽이 행, 오른쪽이 열

int[][] scores = new int[2][3];   // 2 * 3 표 모양의 행렬 생성

 

-구현 방법: 실제로 자바가 표와 같은 형태로 2차원 행렬 데이터를 저장하지는 않는다.

1차원 배열이 다시 1차원 배열을 참조하는 방식으로 2차배열을 만든다.

 

 

 

scores.length //2(배열 A의 길이)
scores[0].length //3(배열 B의 길이)
scores[1].length //3(배열 C의 길이)

scores의 length값을 구하면 처음 행의 길이(2)를 구하게 되지만 scores[0], scores[1]의 길이는 그 행이 참조하고 있는 열의 길이(3)를 구하게 된다.

 

 

 

자바는 1차원 배열을 연결하여 다차원 배열을 만들기 때문에 행렬 구조가 아니라 계단식 구조도 만들 수 있다.

int[][] scores = new int[2][]; //처음엔 행 수만을 입력하고 열의 값을 비워둔다. 
scores[0] = new int[2];  // 0번 째 인덱스에 2칸의 행렬을 대입한다
scores[1] = new int[3];   //1번 째 인덱스에 3칸의 행렬을 대입한다

0 1

0 1 2

모양의 행렬이 만들어 진다.

 


값 목록을 이용한 2차원 배열 생성

타입[][] 변수 = { {값1, 값2, ...}, {값1, 값2, ...}, ...};  //중괄호 블럭의 개수가 행 수, 블럭 내 요소의 개수가 열 수가 된다.
int[][] scores = { {95,80}, {92, 96} };
int score = scores[0][0]; //95
int score = scores[1][1]; //96

 

 

int[][] mathScores = new int[2][3];
for(int i=0; i<2; i++)
{
	for(int k=0; k<3; k++)
    {
		System.out.println("mathScores[" + i + "][" + k + "]=" + mathScores[i][k]);
	}
}

2차원 배열의 요소를 출력하기 위해서는 중첩된 for문을 사용한다.

 

 

계단식 배열에서의 출력 시 주의점이다.

위에 코드에서는 0행에는 2칸의 열을 만들었고, 1행에는 3칸의 열을 계단식으로 만들었다.

이때 안쪽의 for문 반복 조건을  k<3까지 반복하라는 명령을 주었는데

0행에는 열의 개수가 2개밖에 없기 때문에 위와 같이 코드가 정상적으로 출력이 되지 않는다.

 

 

안쪽 for문의 조건문에 k<3이 아니라 englishScores의 행 길이를 변숫값으로 주면 정상적으로 출력할 수 있다.


 

값 목록을 직접 지정해주어 출력할 수 있다.

이때 중괄호 블록의 개수가 행의 개수가 되고 중괄호 내의 요소의 개수가 열의 개수가 된다

위 코드에서는 1행의 요소를 2개를 주고 2행의 요소를 3개를 주어 계단식 배열을 만들었다.