이전 글에서는 기본적인 배열에 대해서 알아 보았고 실질적으로 기본적인 배열이 더 많이 사용된다. 2차원 배열은 사용빈도가 더 적긴 하지만 간간히 사용되니 알아두면 좋을 것이다.(2차원 배열 외에도 3차원 배열 등이 있지만 몰라도 상관없다.)
2차원배열
자료형[][] 변수명 = { {데이터 (0행 0열), 데이터 (0행 1열)}, //0행
{데이터 (1행 0열), 데이터 (1행 1열)}, //1행
{데이터 (2행 0열), 데이터 (2행 1열)},} //2행
//0열 1열
2차원 배열도 기본 배열과 마찬가지로 2가지 형식으로 배열을 정의 할 수 있다. 첫 번째 방식은 배열의 값을 미리 알고 있을 때 사용하게 된다. 2차원 이상의 배열들은 수학의 행렬과 비슷한 자료구조를 갖는다. 우선 간단한 예제를 통해서 알아보자
package Ex01;
public class ArrayEx05 {
public static void main(String[] args) {
int[][] num = { {4, 3, 4}, //0행
{3, 7, 6}, //1행
{5, 8, 7}, //2행
{9, 9, 10}, //3행
// 0열 1열 2열
};
for(int i = 0; i < 4; i++) {
for(int j = 0; j < 3; j++) {
System.out.println(i+"행 "+j+"열의 값:"+num[i][j]);
}
}
}
}
2차원 배열을 정의하는 두번째 방법은 아래와 같다
자료형[] 변수명 = new 자료형[행수][열수];
자료형[0][0] = 데이터; 자료형[0][1] = 데이터;
자료형[1][0] = 데이터; 자료형[1][1] = 데이터;
자료형[2][0] = 데이터; 자료형[2][1] = 데이터;
위 방법은 값을 모르는 경우에 주로 사용 된다. 우선은 첫 번째 방법과 같은 예제를 두 번째 방법으로 정의 하는 방법에 대해서 알아보자.
package Ex01;
public class ArrayEx06 {
public static void main(String[] args) {
int[][] num = new int[4][3]; // 4행 3열 배열 생성
num[0][0]= 4; num[0][1]= 3; num[0][2]= 4; // 값 할당
num[1][0]= 3; num[1][1]= 7; num[1][2]= 6; // 값 할당
num[2][0]= 5; num[2][1]= 8; num[2][2]= 7; // 값 할당
num[3][0]= 9; num[3][1]= 9; num[3][2]= 10; // 값 할당
for (int i = 0; i < 4; i++) { // 행 반복
for (int j = 0; j < 3; j++) { // 열 반복
System.out.println(i+"행 "+j+"열의 값:"+num[i][j]);
}
}
}
}
첫 번째 방법으로 정의한 배열과 동일한 결과가 출력된다. 그러면 2차원 배열과 관련된 응용 예제들에 대해서 몇 가지 알아보도록 하자!
package Ex01;
public class ArrayEx07 {
public static void main(String[] args) {
int[][] score = { { 79, 80, 99 }, // A학생
{ 95, 85, 89 }, // B학생
{ 90, 65, 56 }, // C학생
{ 69, 78, 77 } }; // D학생
// 과목 : a b c
int[] student = new int[4]; //학생 총점 배열 생성
int[] subject = new int[3]; //과목 총점 배열 생성
String[] stuName = {"A학생", "B학생", "C학생", "D학생"}; //학생 배열 저장
String[] subName = {"영어", "수학", "과학"}; //과목 배열 저장
for(int i = 0; i < student.length; i++) {
for(int j = 0; j < subject.length; j++) {
student[i] += score[i][j]; // 학생별 총점 계산
}
System.out.println(stuName[i] + " 총점 : " + student[i]);
}
System.out.println("--------------");
for(int j = 0; j < subject.length; j++) {
for(int i = 0; i < student.length; i++) {
subject[j] += score[i][j];// 과목별 총점 계산
}
System.out.println(subName[j]+" 총점 : "+subject[j]);
}
}
}
조금은 어려운 예제 일수도 있다. 우선 4명의 학생의 과목별 점수를 2차원 배열로 저장하였다. 다음 학생별 총점과 과목별 총점 저장을 위한 배열을 생성하였다. 그리고 학생별/과목별 총점 계산을 위한 반복문을 정의하고 저장된 값을 출력시켰다.(한가지 알아두면 좋을 내용은 총점 계산을 위한 값 계산시 초기값을 주지않았는데 그 이유는 배열은 생성을 하면 기본적으로 0이라는 초기값을 갖는다.) 결과는 아래와 같이 출력된다.
추가적으로 2차원 배열을 이용해서 구구단을 출력하는 예제를 알아보자
package Ex01;
public class ArrayEx08 {
public static void main(String[] args) {
int[][] kukudan = new int[8][9]; //구구단 값 저장을 위한 배열 생성
for(int i = 0; i<8; i++) {//단수 (행)반복
for(int j = 0; j<9; j++) {//곱하기(열) 반복
kukudan[i][j] = (i+2)*(j+1);//배열에 값 저장
System.out.print((i+2)+"x"+(j+1)+"="+kukudan[i][j]+"\t");
}
System.out.println();
}
}
}
먼저 값 저장을 위한 배열을 생성하였다. 다음 단수(행)와 곱하기(열)를 반복시키기 위한 반복문을 정의하고 배열에 값을 저장하고 저장된 값을 출력한다. 결과는 아래와 같다.
지금까지 2차원 배열에 대해서 알아보았다. 기본 배열보다는 어렵게 느껴질 것이다.. 만일 사용하기에 어려우면 반드시 사용할필요는 없고 넘어가도 좋다.(기본 배열이 더중요하고 자주 사용된다.) 다른 방법으로도 충분히 같은 결과를 얻을 수 있다. 개발자가 사용하기에 편리한것을 사용하는게 더 좋다.
'JAVA' 카테고리의 다른 글
[JAVA] Queue 정리 (0) | 2019.12.13 |
---|---|
[java] Stack 스택 정리 (0) | 2019.12.13 |
정규식표현으로 이메일 주소 패턴 만들기 (0) | 2019.12.13 |
배열(Array) 선언 및 사용 방법 (0) | 2019.12.12 |
JAVA - 자바 시작하기 (자바설치, 개발환경 설정) (0) | 2019.12.03 |