[Java] 11_2차 배열
2차 배열
열의 개념만 존재하는 1차 배열에 행의 개념을 추가한 형태.
정확한 개념은 1차 배열의 각 원소가 다른 배열로 구성된 형태.
#01. 2차 배열 사용하기
1) 배열의 생성
변수 선언시 데이터 타입 뒤에 행과 열을 의미하는 대괄호([]
)를 각각 명시
int[][] myarr;
할당
new
키워드 뒤에 데이터 타입을 명시하고 대괄호 안에 행과 열의 수를 결정해준다.
myarr = new int[2][3]; // 2행 3열
선언과 할당의 통합
int[][] myarr = new int[2][3];
선언, 할당, 값 대입을 일괄 처리하기
int[][] myarr = new int[][] { { 1, 2, 3}, { 10, 20, 30} };
new int[][]
는 생략가능
int[][] myarr = { { 1, 2, 3}, { 10, 20, 30} };
배열은 값을 대입하지 않고 크기만 할당해 놓을 경우 모든 원소는 0으로 자동 초기화 된다.
2) 배열의 원소에 접근하기
2행 3열인 경우 행의 인덱스는 0부터 1까지, 열의 인덱스는 0부터2까지 존재한다.
배열에 저장된 원소에 접근하기 위해서는 변수이름 뒤에 행, 열의 순서로 인덱스를 명시한다.
myarr[0][0] = 1; // 0행 0열
myarr[0][1] = 2; // 0행 1열
myarr[0][2] = 3; // 0행 2열
myarr[1][0] = 10; // 1행 0열
myarr[1][1] = 20; // 1행 1열
myarr[1][2] = 30; // 1행 2열
0번째 열 | 1번째 열 | 2번째 열 | |
---|---|---|---|
0번째 행 | (0,0) = 1 | (0,1) = 2 | (0,2) = 3 |
1번재 행 | (1,0) = 10 | (1,1) = 20 | (1,2) = 30 |
3) 가변배열
2차 배열의 정확한 개념은 1차 배열의 각 원소가 다른 배열로 구성된 형태이다.
TwoDimArray1.java
public class TwoDimArray1 {
public static void main(String[] args) {
// 독립적인 1차 배열 구성
int [] arr1 = { 1, 2, 3};
int [] arr2 = { 10, 20, 30};
int [][] two_array = { arr1, arr2 };
System.out.print(two_array[0][0] + ", ");
System.out.print(two_array[0][1] + ", ");
System.out.print(two_array[0][2] + " ");
System.out.print(two_array[1][0] + ", ");
System.out.print(two_array[1][1] + ", ");
System.out.print(two_array[1][2]);
}
}
출력결과
1, 2, 3 10, 20, 30
2차 배열의 행, 열 크기 구하기
2차 배열에 대한 길이를 직접 구하면 행의 크기를 알 수 있다.
int rowSize = myarr.length;
2차 배열의 모든 행에 대한 열크기가 항상 동일하다는 보장이 없기 때문에 열의 크기는 각 행마다 개별적으로 구해야 한다.
int colSize0 = myarr[0].length; // 0번째 행의 열 크기
int colSize1 = myarr[1].length; // 1번째 행의 열 크기
#02. 2차 배열과 반복문
1) 배열의 모든 원소 스캔하기
2차 배열의 모든 원소를 반복문으로 스캔하기 위해서는 중첩 반복문을 사용해야 한다.
이 때 부모 반복문은 행에 대해 관여하고, 자식 반복문은 열에 대해 관여한다.
TwoDimArray3.java
public calss TwoDimArray2 {
public static void main(String[] args) {
// 독립적인 1차 배열 구성
int[] arr1 = {1, 2};
int[] arr2 = {10, 20, 30, 40};
int[][] twoArray = { arr1, arr2 };
// 배열의 `행`에 대한 반복
for (int i=0; i<twoArray.length; i++) {
System.out.println(i + "번째 행 -------------------");
// i번째 행의 `열`에 대한 반복
for (int j=0; j<twoArray[i].length; j++) {
System.out.printf("\t%d번째 열 >> %d\n", j, twoArray[i][j]);
}
}
}
}
출력결과
0번째 행 -------------------
0번째 열 >> 1
1번째 열 >> 2
1번째 행 -------------------
0번째 열 >> 10
1번째 열 >> 20
2번째 열 >> 30
3번째 열 >> 40
실습) GradeTable.java
아래의 성적표를 2차 배열로 표현하고 각 학생별로 총점과 평균을 구해 출력하시오.
국어 | 영어 | 수학 | |
---|---|---|---|
철수 | 92 | 81 | 76 |
영희 | 72 | 95 | 84 |
민혁 | 80 | 86 | 98 |
실습) GradeTable2.java
위의 성적표를 보고 학생 이름을 1차 배열로, 학생들의 점수를 2차 배열로 표현한 뒤 각 학생별로 총점과 평균을 구해 출력 하시오.
실습) NumberTable.java
5행 7열로 구성된 2차 배열을 준비하고 배열의 모든 칸에 1부터 순차적으로 증가하는 값을 대입하세요