한모로그 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);

 }

}


실행 결과