- 1차원 배열 여러개의 묶음을 관리하는 배열
- 행과 열로 이우러진 테이블(표) 구조와 유사한 구조의 배열 => 행과 열의 인덱스는 1차원 배열과 동일(0부터 시작)
2차원 배열 선언 및 생성 기본 문법
데이터타입[][] 변수명 = new 데이터타입[행크기][열크기];
2차원 배열 접근 기본 문법
변수명[행인덱스][열인덱스];
2차원 배열선언, 생성, 초기화를 한꺼번에 수행하는 문법
데이터타입[][] 변수명 = {
{값1, 값2,...값n}, // 0행(0열,1열,...,n열)
{값1, 값2,...값n}, // 1행(0열,1열,...,n열)
...생략...
{값1, 값2,...값n} // n행(0열,1열,...,n열)
};
2차원 배열 크기
- 행의 크기 : 변수명.length
- 열의 크기 : 변수명[행번호].length
2차원 배열의 모든 요소를 차례대로 접근하는 문법
for(int i=0; i<변수명.length; i++) { //행 반복
for(int j=0; j<변수명[행번호].length; j++) { //열 반복
// 변수명[i][j]로 배열 각 요소에 접근
}
}
int형 2차원 배열 arr 생성(3행 2열 크기)
int[][] arr;
arr = new int[3][2]; // 3행 2열
위의 두 문장을 한 문장으로 결합(선언 및 생성 동시에 수행)
int[][] arr = new int[3][2]; // 3행 2열
arr[0][0] = 1; arr[0][1] = 2;
arr[1][0] = 3; arr[1][1] = 4;
arr[2][0] = 5; arr[2][1] = 6;
System.out.println(arr[0][0]); // 1
System.out.println(arr[0][1]); // 2
System.out.println(arr[1][0]); // 3
System.out.println(arr[1][1]); // 4
System.out.println(arr[2][0]); // 5
System.out.println(arr[2][1]); // 6
배열 크기 알아내기
- 배열의 행 크기 알아내기 : 배열명.length
System.out.println("배열 arr의 행 크기 : " + arr.length);
- 배열의 각 행에 대한 열 크기 알아내기 : 배열명[행인덱스].length
System.out.println("배열 arr의 0번 행의 열 크기 : " + arr[0].length);
System.out.println("배열 arr의 1번 행의 열 크기 : " + arr[1].length);
System.out.println("배열 arr의 2번 행의 열 크기 : " + arr[2].length);
int[][] arr2 = {
// 전체 블록 내의 중괄호(블록) 개수 = 행의 개수
// 내부 중괄호(블록) 내의 데이터 개수 = 열의 개수
{1, 2}, // 0행(0열, 1열)
{3, 4}, // 1행(0열, 1열)
{5, 6}, // 2행(0열, 1열)
};
// 중첩 for문을 사용하여 2차원 배열 차례대로 접근
for(int i = 0; i < arr2.length; i++) {
for(int j = 0; j < arr2[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
다른 방법으로 똑같은 결과 내기
int[][] arr2 = {
// 전체 블록 내의 중괄호(블록) 개수 = 행의 개수
// 내부 중괄호(블록) 내의 데이터 개수 = 열의 개수
{1, 2}, // 0행(0열, 1열)
{3, 4}, // 1행(0열, 1열)
{5, 6}, // 2행(0열, 1열)
};
// 중첩 for문을 사용하여 2차원 배열 차례대로 접근
for(int i = 0; i < arr2.length; i++) {
for(int j = 0; j < arr2[i].length; j++) {
System.out.print(arr2[i][j] + " ");
}
System.out.println();
}
이름을 저장하는 배열 names 생성하고 다음과 같이 초기화
String[][] names = {
{"김영미", "차주현", "땅콩이"},
{"따옹이", "안지수", "이민선"},
{"이한나", "지상은", "박혜리"}
};
// 중첩 for문을 사용하여 2차원 배열 차례대로 접근
for(int i = 0; i<names.length; i++) {
for(int j = 0; j < names[i].length; j++) {
System.out.print(names[i][j] + " ");
}
System.out.println();
}
2차원 배열은 행을 먼저 생성한 후 별도로 열을 각각 생성 가능하다!
데이터타입[][] 배열명 = new 데이터타입[행크기][열크기]
int[][] arr3 = new int[3][]; // 3행의 공간이 먼저 생성됨
// 각 행에 접근하여 열을 생성하는 코드 작성
arr3[0] = new int[3];
// => 정수형 배열 3개를 저장하는 공간을 생성 후 0번 행에 주소 저장
arr3[1] = new int[2];
// => 정수형 배열 2개를 저장하는 공간을 생성 후 1번 행에 주소 저장
arr3[2] = new int[4];
// => 정수형 배열 4개를 저장하는 공간을 생성 후 2번 행에 주소 저장
arr3[0][0] = 1; arr3[0][1]=2; arr3[0][2]=3;
arr3[1][0] = 4; arr3[1][1]=5;
arr3[2][0] = 6; arr3[2][1]=7; arr3[2][2]=8; arr3[2][3]=9;
for(int i = 0; i<arr3.length; i++) {
for(int j = 0; j < arr3[i].length; j++) {
System.out.print(arr3[i][j] + " ");
}
System.out.println();
}
같은 결과를 내는 또 다른 방법
⇒각 행의 공간에 열 공간을 생성하면서 데이터 초기화까지 수행
arr3[0] = new int[] {1,2,3};
arr3[1] = new int[] {4,5};
arr3[2] = new int[] {6,7,8,9};
// 반복문을 사용하여 배열 내의 모든 데이터 출력
for(int i = 0; i<arr3.length; i++) {
for(int j = 0; j < arr3[i].length; j++) {
System.out.print(arr3[i][j] + " ");
}
System.out.println();
}
같은 결과를 내는 또 다른 방법2
⇒각 행의 공간에 열 공간을 생성하면서 데이터 초기화까지 수행
+합계, 평균까지 구해보기
int sum=0;
double avg=0;
int count=0;
int[][] arr3_1 = {
{1,2,3},
{4,5},
{6,7,8,9}
};
for(int i = 0; i<arr3_1.length; i++) {
for(int j = 0; j < arr3_1[i].length; j++) {
System.out.print(arr3_1[i][j] + " ");
sum += arr3_1[i][j];
count++;
}
System.out.println();
}
System.out.println("sum : " + sum);
avg = (double)(sum/count);
System.out.println("avg : " + avg);
}
정수를 저장하는 2차원 배열 array를 생성
int[][] arr = {
{95,86},
{83,92,96},
{78,83,93,87,88}
};
int sum=0;
double avg=0.0;
int count = 0;
for(int i=0;i<arr.length;i++) {
for(int j=0;j<arr[i].length;j++) {
System.out.print(arr[i][j] + " ");
sum += arr[i][j];
count++;
}
System.out.println();
}
학생 이름은 1차원배열(names)에 저장하고 학생 점수를 2차원배열(score)에 다음과 같이 저장 후 출력
// 1차원 배열 names에 이름 저장
String[] names = {"김영미","차주현","땅콩이","따옹이","땅캥이"};
// 2차원 배열 score에 점수 저장
int score[][] = {
{80,70,80},
{90,90,90},
{56,60,77},
{100,100,100},
{80,80,80}
};
System.out.println("-------<학생 점수표>-------");
System.out.printf("%s 국어 영어 수학\\n", " ");
for(int i=0;i<score.length;i++) {
// 점수를 저장한 2차원 배열의 행크기(score.length)와
// 이름을 저장한 1차원 배열의 크기(names, length)가 같다!
// 행크기 반복문의 제어변수로 이름 인덱스 사용 가능!
System.out.print(names[i]);
for(int j=0; j<score[i].length; j++) {
System.out.printf( "%4d", +score[i][j]);
// System.out.print(score[i][j] + " ");
}
System.out.println();
}
int[] studentTotal = new int[5]; //5명의 총점을 저장할 배열 생성
// 반복문을 사용하지 않고 합계를 계산하는 경우
// studentTotal[0] = score[0][0] + score[0][1] + score[0][2];
// studentTotal[1] = score[1][0] + score[1][1] + score[1][2];
// studentTotal[2] = score[2][0] + score[2][1] + score[2][2];
// studentTotal[3] = score[3][0] + score[3][1] + score[3][2];
// studentTotal[4] = score[4][0] + score[4][1] + score[4][2];
// System.out.println("< 학생별 총점 >");
// System.out.println(names[0] + " : " + studentTotal[0]);
// System.out.println(names[1] + " : " + studentTotal[1]);
// System.out.println(names[2] + " : " + studentTotal[2]);
// System.out.println(names[3] + " : " + studentTotal[3]);
// System.out.println(names[4] + " : " + studentTotal[4]);
// 학생 점수 누적을 위해 2차원 배열에 대한 반복문 작성 시
System.out.println("< 학생별 총점 >");
for(int i = 0; i < score.length; i++) {
for(int j = 0; j < score[i].length; j++) {
// 학생 점수 인덱스 중 행번호에 해당하는 인덱스가
// 학생 총점의 인덱스로 사용될 수 있다!
// => 즉, 각 학생의 행번호(i)를 사용하여 학생의 3과목 점수를
// 총점 배열의 인덱스 행번호를 사용하여 누적
studentTotal[i] += score[i][j];
}
// 1명의 점수 누적이 끝난 시점에서 이름과 총점을 출력
System.out.println(names[i] + " : " + studentTotal[i] + "점");
}
'JAVA' 카테고리의 다른 글
[JAVA] 가변형 인자 (0) | 2023.09.13 |
---|---|
[JAVA] Pass_by value·reference -메서드 호출 시 값 전달 방식에 따른 차이 (0) | 2023.09.13 |
[JAVA] 배열을 활용하여 거스름돈을 동전으로 바꾸기 (0) | 2023.09.11 |
[JAVA] 배열 내의 데이터에 대한 연산 누적 (0) | 2023.09.11 |
[JAVA] 배열(array) (2) (0) | 2023.09.11 |