객체 지향 프로그래밍 - 참조 타입
다차원 배열
한모로그
2023. 1. 15. 16:44
다차원 배열
- 배열 항목에는 또 다른 배열이 대입된 배열
출처, 이것이 자바다
값 목록으로 다차원 배열 생성
- 값 목록으로 다차원 배열을 생성 시 배열 변수 선언 시 타입 뒤에 대괄호 [ ]를 차원의 수만큼 붙이고, 값 목록도 마찬가지로 차원의 수만큼 중괄호를 중첩
출처, 이것이 자바다
package ch05.sec07;
/*
* 다차원 배열 : 힙영역의 배열 기억장소는 연속적으로 생성되어 있다.
*/
public class MultidimensionalArrayByValueListExample {
public static void main(String[] args) {
//각 행마다 열의 개수가 다른 구조 : 가변배열(jagged Array)
//2차원 배열 생성
int[][] scores = {
{80, 90, 96}, //1반 scores[0] : 1행
{76, 88} //2반 scores[1] : 2행
};
//배열의 길이
System.out.println("1차원 배열 길이(반의 수): " + scores.length); // 행의 개수
System.out.println("2차원 배열 길이(첫 번째 반의 학생 수): " + scores[0].length);
System.out.println("2차원 배열 길이(두 번째 반의 학생 수): " + scores[1].length);
//1반의 1번 학생점수 참조 scores[0][0]
System.out.println("scores[0][0]: " + scores[0][0]);
//2반의 2번 학생점수 참조 scores[1][1]
System.out.println("scores[1][1]: " + scores[1][1]);
//1반의 총점및 평균점수 구하기
int class1Sum = 0;
for(int i=0; i<scores[0].length; i++) {
class1Sum += scores[0][i];//열만 바꿔주기 위해 i 대입
}
double class1Avg = (double) class1Sum / scores[0].length;
System.out.println("1반의 총점은: " + class1Sum);
System.out.println("1반의 평균은: " + class1Avg);
//2반의 총점및 평균점수 구하기
int class2Sum = 0;
for(int i=0; i<scores[1].length; i++) {
class2Sum += scores[1][i];
}
double class2Avg = (double) class2Sum / scores[1].length;
System.out.println("2반의 총점은: " + class2Sum);
System.out.println("2반의 편균은: " + class2Avg);
//전체점수와 평균 구하기
int totalStudent = 0;
int totalSum = 0;
//scores.length : 행의 개수. 즉 반의 개수
//scores[i].length : 행의 열의 개수. 즉 반의 학생수
for(int i=0; i<scores.length; i++) {
totalStudent += scores[i].length;
for(int k=0; k<scores.length; k++) {
totalSum += scores[i][k];
}
}
double totalAvg = (double) totalSum / totalStudent;
System.out.println("전체 학생의 점수: " + totalSum);
System.out.println("전체 학생의 평균: " + totalAvg);
}
}
실행 결과
new 연산자로 다차원 배열 생성
- new 연산자로 다차원 배열을 생성하려면 배열 변수 선언 시 타입 뒤에 대괄호 [ ]를 차원의 수만큼 붙이고, new 타입 뒤에도 차원의 수만큼 대괄호 [ ]를 작성
출처, 이것이 자바다
package ch05.sec07;
/*
* 3차원 배열
* int[][][] arr = new int[면][행][열];
* int[][][] arr = new int[2][3][4];
*
* 면 참조 : arr[0], arr[1]
* 1면 1행 참조 : arr[0][0]
* 데이터 : arr[0][0][0]
*
* 3행4열의 구조를 갖는 배열이 2개 존재하는 의미로 해석.
*/
public class MultidimensionalArrayByNewExample {
public static void main(String[] args) {
/*
* 2차원 배열 : mathScores
* 1행 : mathScores[0]
* 2행 : mathScores[1]
*/
//각 반의 학생수가 3명 동일한 경우 점수저장을 위한 2차원 배열생성
int[][] mathScores = new int[2][3]; //new int[행크기][열크기]; 초기값 0
//배열항목 초기값 출력
//행의 크기 : mathScores.length
//각 행의 열크기 : mathScores[i].length
for(int i=0; i<mathScores.length; i++) {
for(int k=0; k<mathScores[i].length; k++) {
System.out.print("mathScores[" + i + "][" + k + "]: " + mathScores[i][k] + "\t");
}
System.out.println();
}
//배열 항목 값 변경
mathScores[0][0] = 80;
mathScores[0][1] = 83;
mathScores[0][2] = 85;
mathScores[1][0] = 86;
mathScores[1][1] = 90;
mathScores[1][2] = 92;
//전체 학생의 수학평균 구하기
int totalStudent = 0;
int totalMathSum = 0;
for(int i=0; i<mathScores.length; i++) {
totalStudent += mathScores[i].length;
for(int k=0; k<mathScores[i].length; k++) {
totalMathSum += mathScores[i][k];
}
}
double totalMathAvg = (double)totalMathSum / totalStudent;
System.out.println("전체 학생의 수학 평균점수: " + totalMathAvg);
System.out.println();
//각 행마다 열의 개수가 다른 구조 : 가변배열(jagged Array)
//가변배열 목적 : 기억장소 낭비를 막는 의미.
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.print("englishScores[" + i + "][" + k + "]: " + englishScores[i][k] + "\t");
}
System.out.println();
}
englishScores[0][0] = 90;
englishScores[0][1] = 91;
englishScores[1][0] = 92;
englishScores[1][1] = 93;
englishScores[1][2] = 94;
//전체 학생의 영어 평균 구하기
totalStudent = 0;
int totalEnglishSum = 0;
for(int i=0; i<englishScores.length; i++) {
totalStudent += englishScores[i].length;
for(int k=0; k<englishScores[i].length; k++) {
totalEnglishSum += englishScores[i][k];
}
}double totalEnglishAvg = (double) totalEnglishSum / totalStudent;
System.out.println("전체 학생의 영어 평균 점수: " + totalEnglishAvg);
}
}
실행 결과