반응형

2차원 배열 예제

[Ex5_8]

public class Ex5_8 {

    public static void main(String[] args) {
        int[][] score = {
                {100, 100, 100},
                {20, 20, 20},
                {30, 30, 30},
                {40, 40, 40}
        };
        int sum = 0;

        for(int i = 0; i < score.length; i = i + 1) {
            for (int j = 0; j < score[i].length; j = j + 1) {
                System.out.printf("score[%d][%d]=%d%n", i, j, score[i][j]);

                sum = sum + score[i][j];
            }
        }
        System.out.println("sum=" + sum);
    }
}

[실행 결과]

score[0][0]=100
score[0][1]=100
score[0][2]=100
score[1][0]=20
score[1][1]=20
score[1][2]=20
score[2][0]=30
score[2][1]=30
score[2][2]=30
score[3][0]=40
score[3][1]=40
score[3][2]=40
sum=570

이 예제는 2차원 배열 score에 저장되어 있는 값들을 변수sum에 모두 더해서 저장하고, 출력하는 예제이다.

2차원 배열의 모든 요소를 탐색해야하므로 이중반복문을 사용했다.

 

score배열을 그림으로 표현 한 것이다.

score.length가 가리키는 것은 score배열의 행이다.  행은 4이다.
그리고, score[i].length가 가리키는 것은 각 행에 담겨있는 데이터의 갯수, 즉 열의 갯수 이다.
따라서 열은 3이다.

지금은 모든 행에 담겨있는 데이터의 갯수가 3개로 동일하므로
이중포문에서 안에 있는 for문의 조건문에 score[i].length대신, score[0]을 써도 되지만,
혹시 다른 경우도 있을 경우를 대비해서 코드를 짠 것이다.

이중 반복문이 4번 * 3번 도므로 총 12번을 돌아서 각 요소의 값을 하나씩 탐색하는 것이다.

 

[Ex5_9]

import java.util.*;

public class Ex5_9 {

    public static void main(String[] args) {
        int[][] score = {
                {100, 100, 100,},
                {20, 20, 20},
                {30, 30, 30},
                {40, 40, 40},
                {50, 50, 50}
        };
        // 과목별 총점
        int korTotal = 0, engTotal = 0, mathTotal = 0;

        System.out.println("번호 국어 영어 수학 총점 평균");
        System.out.println("==========================");

        for (int i = 0; i < score.length; i = i + 1) {
            int sum = 0;        // 개인별 총점
            float avg = 0.0f;   // 개인별 평균
            korTotal = korTotal + score[i][0];
            engTotal = engTotal + score[i][1];
            mathTotal = mathTotal + score[i][2];
            System.out.printf("%3d", i + 1);        // println이 아니라 printf여서 개행문자를 적어주지 않는 한, 다음줄로 넘어가지 않음
                for (int j = 0; j < score[i].length; j = j + 1) {
                    sum = sum+score[i][j];
                    avg = sum / (float)score[i].length;
                }
            System.out.println("  "+score[i][0]+"  "+score[i][1]+"  "+score[i][2]+"  "+sum+"  "+avg);
        }
        System.out.println("==========================");

        System.out.println("총점:"+korTotal+" "+engTotal+" "+mathTotal);
    }
}

[실행 결과]

번호 국어 영어 수학 총점 평균
==========================
  1  100  100  100  300  100.0
  2  20  20  20  60  20.0
  3  30  30  30  90  30.0
  4  40  40  40  120  40.0
  5  50  50  50  150  50.0
==========================
총점:240 240 240

이 예제는 score라는 2차원 배열이 있을 때, 해당 배열을 이용해서 각 과목의 점수와 총점, 그리고 평균을 구하는 예제이다.
어렵지 않게 풀이 할 수 있을 것이다.

 

[Ex5_10]

import java.util.Scanner;

public class Ex5_10 {

    public static void main(String[] args){
        String[][] words = {
                {"chair", "의자"},        // words[0][0], words[0][1]
                {"computer", "컴퓨터"},    // words[1][0], words[1][1]
                {"integer", "정수"}       // words[2][0], words[2][1]
        };
        Scanner scanner = new Scanner(System.in);

        for (int i = 0; i < words.length; i = i + 1){
            System.out.printf("Q%d. %s의 뜻은?", i + 1, words[i][0]);

            String tmp = scanner.nextLine();

            if(tmp.equals(words[i][1])) {
                System.out.printf("정답입니다. %n%n");
            } else {
                System.out.printf("틀렸습니다. 정답은 %s입니다. %n%n", words[i][1]);
            }
          }
        }
    }

[실해 결과]

Q1. chair의 뜻은?의자
정답입니다. 

Q2. computer의 뜻은?콤퓨타
틀렸습니다. 정답은 컴퓨터입니다. 

Q3. integer의 뜻은?정수
정답입니다.

이 예제는 퀴즈를 생성하는 예제이다. 

2차원 배열의 특성을 이용해 보자.

반응형

'JAVA' 카테고리의 다른 글

객체지향 언어  (0) 2022.03.24
Arrays로 배열 다루기  (0) 2022.03.23
2차원 배열  (0) 2022.03.23
커맨드 라인 입력받기  (0) 2022.03.23
String클래스  (0) 2022.03.23