다차원 배열
수학 행렬처럼 가로 인덱스와 세로 인덱스를 사용한다.
2행 3열 행렬을 만들기 위해서는 아래와 같이 2차원 배열을 생성한다.
int[ ][ ] scores = new int[2][3] |
위의 코드는 아래와 같이 세 개의 배열 객체를 생성한다.
배열 변수 scores는 길이 2인 배열 A를 참조한다.
scores[0]은 다시 길이 3인 배열 B를 참조하고 scores[1]은 다시 길이 3인 배열 C를 참조한다.
scores[0] 과 scores[1]은 모두 배열을 참조하는 변수 역할을 한다.
따라서 각 배열의 길이는 아래와 같이 얻을 수 있다.
scores.length // 2 (배열 A의 길이) scores[0].length // 3 (배열 B의 길이) scores[1].length // 3 (배열 C의 길이) |
즉 scores[0][1] 은 배열 B의 인덱스 1 의 값, scores[1][0] 은 배열 C의 인덱스 0의 값에 해당된다.
자바는 일차원 배열이 서로 연결된 구조로 배열을 구현하기 때문에 행렬 구조가 아닌 계단식 구조를 가질 수 있다.
int[ ][ ] scores = new int[2][ ]; // 배열 A 생성 scores[0] = new int[2]; // 0 1 배열 B 생성 scores[1] = new int[3]; // 0 1 2 배열 C 생성 |
위 코드는 아래와 같이 메모리에 배열 객체를 생성한다.
scores.length; // 2 (배열 A의 길이) scores[0].length; // 2 (배열 B의 길이) scores[1].length; // 3 (배열 C의 길이) |
계단형 배열에서 주의할 점
- 배열의 길이를 알고 인덱스를 사용해야 한다!
scores[0][2]; // ArrayIndexOutOfBoundsException 발생
배열 B 의 객체의 마지막 인덱스는 1이기 때문이다.
scores[1][2]는 배열 C 객체의 세 번째 항목을 가리킨다.
- 만약 그룹화된 값 목록을 가지고 있다면, 중괄호 안에 중괄호를 이용해서 값 목록으로 생성할 수 있다.
타입[ ][ ] 변수 = { {값1, 값2, . . . }, { 값1, 값2, . . . }, . . . }; |
ex)
int[ ][ ] scores = { {95, 80}, {92, 96} };
int score = scores[0][0] // 95
int score = scores[1][1] // 96
ex) 배열 속의 배열
public class ArrayInArrayExam {
public static void main(String[] args) {
int[][] mathScores = new int[2][3];
for(int i = 0; i < mathScores.length; i++) {
for(int k = 0; k < mathScores[i].length; k++) {
System.out.println("mathScores["+i+"]["+k+"]="+mathScores[i][k]);
}
}
System.out.println();
int[][] englishScores = new int[2][];
englishScores[0] = new int[2];
englishScores[1] = new int[3];
for(int i = 0; i < englishScores.length; i++) {
for(int k = 0; k < englishScores[i].length; k++) {
System.out.println("englishScores["+i+"]["+k+"]="+englishScores[i][k]);
}
}
System.out.println();
int[][] javaScores = { {95, 80}, {92, 96, 80} };
for(int i = 0; i < javaScores.length; i++) {
for(int k = 0; k < javaScores[i].length; k++) {
System.out.println("javaScores["+i+"]["+k+"]="+javaScores[i][k]);
}
}
}
}
'Java 기본 문법 - 참조 서적 [이것이 자바다 - 한빛미디어] > 3. 참조 타입' 카테고리의 다른 글
8. Java 자바 참조 타입 - 열거 타입 (0) | 2020.05.12 |
---|---|
7. Java 자바 참조 타입 - 객체를 참조하는 배열, 배열 복사, 향상된 for 문 (0) | 2020.05.07 |
5. Java 자바 참조 타입 - 커맨드 라인 입력 (String[] args 용도) (0) | 2020.05.06 |
4. Java 자바 참조 타입 - 배열 길이 (0) | 2020.05.06 |
3. Java 자바 참조 타입 - 배열 (0) | 2020.05.05 |