STUDY/web

자바 다차원 배열

이앤지 2021. 9. 14. 20:13

기초적인 배열에서

배열을 선언하면 스택의 ab번지에 저장이되고 그 안의 인덱스 값은

힙에 저장되어있는 ab번지를 타고 들어가서 0번째 인덱스에 30, 1번째 인덱스에 40.. 값을 알 수 있었고,

 

 

오늘은 다차원배열에 대한 설명을 들었다.

이론은 일차원배열과 동일하지만,

2차원배열부터 다차원배열로 구조를 상상하기가 조금씩 버거워지는데

이럴땐 표를 그려서 상상해보면 편하다고 하셨다.

아래는 선생님께서 예시를 들어주시려고 심플하게 그려주신 표인데

당.연.히. "심플"이라도 컬럼의 데이터 타입은 같지 않다. 

 

위의 표를

컬럼대로, 튜플대로, 인덱스대로, 모아모아 하나의 단체로 생각하고 묶으면

코드를 짤 때, 좀 더 편하게 상상할 수 있다.

 

그런 의미에서 퀴즈 복습!

/*퀴즈 제한시간 30분
 * 배열을 사용하되
 * 입력과 출력을 메뉴로 분리 시켜서
 * 사용자가 개별 기능을 따로 입력시키는
 * 학생 관리 프로그램을 만들어 보시오.

 * 학생 관리 프로그램: 5명의 학생의 정보를 차례대로 입력받고 차례대로 출력하는 프로그램  
 * 1번 학생의 번호, 이름, 국어, 영어, 수학
 * 2번 ...
 * 3번 ...
 * 4번 ...
 * 5번 ...
 * 입력 후에
 * --------------------
 * ### 학생 정보
 * --------------------
 * 번호: ###번  이름: ###

 */

 

 

 

아래는 위 퀴즈의 코드 리뷰!

더보기
import java.util.Scanner;

public class Ex02GradeBook2 {
    public static void main(String[] args) {
	// 상수
        // 1. 과목 숫자
        final int SUBJECT_SIZE = 3;
        // 2. 학생 숫자
        final int STUDENT_SIZE = 5;

        // 변수
        // 1. Scanner 변수
        Scanner scanner = new Scanner(System.in);
        // 2. 번호 배열
        int[] idArray = new int[STUDENT_SIZE];
        // 3. 이름 배열
        String[] nameArray = new String[STUDENT_SIZE];
        // 4. 국어 점수 배열
        int[] koreanArray = new int[STUDENT_SIZE];
        // 5. 영어 점수 배열
        int[] englishArray = new int[STUDENT_SIZE];
        // 6. 수학 점수 배열
        int[] mathArray = new int[STUDENT_SIZE];
        // 7. 다음에 입력'할' 인덱스를 저장한 int 변수
        int curIndex = 0;
        // 위의 curIndex를 사용하면
        // 한명도 입력이 안된 상태에서 출력을 할 시에는
        // "아직 입력된 학생의 정보가 없습니다" 를 출력하거나
        // 혹은 5명을 초과하여 입력할 시에는
        // "더이상 입력하실 수 없습니다" 라고 출력해 줄수도 있고
        // 출력 시에는 현재 입력된 학생들만 출력이 가능하다.

        while (true) {
            System.out.println("1. 입력 2. 출력 3. 종료");
            System.out.print("> ");
            int userChoice = scanner.nextInt();

            if (userChoice == 1) {
                // 입력 코드 구현

                if (curIndex < STUDENT_SIZE) {
                    // 각 배열의 curIndex번 인덱스에
                    // 정보를 입력한다.

                    // 번호 입력
                    System.out.println("번호를 입력해주세요.");
                    System.out.print("> ");
                    idArray[curIndex] = scanner.nextInt();

                    // 이름 입력
                    System.out.println("이름을 입력해주세요.");
                    System.out.print("> ");
                    scanner.nextLine();
                    nameArray[curIndex] = scanner.nextLine();

                    // 국어 입력
                    System.out.println("국어 점수를 입력해주세요.");
                    System.out.print("> ");
                    koreanArray[curIndex] = scanner.nextInt();

                    while (!(koreanArray[curIndex] >= 0 && koreanArray[curIndex] <= 100)) {
                        System.out.println("잘못 입력하셨습니다.");

                        System.out.println("국어 점수를 입력해주세요.");
                        System.out.print("> ");
                        koreanArray[curIndex] = scanner.nextInt();
                    }

                    // 영어 입력
                    System.out.println("영어 점수를 입력해주세요.");
                    System.out.print("> ");
                    englishArray[curIndex] = scanner.nextInt();

                    while (!(englishArray[curIndex] >= 0 && englishArray[curIndex] <= 100)) {
                        System.out.println("잘못 입력하셨습니다.");

                        System.out.println("영어 점수를 입력해주세요.");
                        System.out.print("> ");
                        englishArray[curIndex] = scanner.nextInt();
                    }

                    // 수학 입력
                    System.out.println("수학 점수를 입력해주세요.");
                    System.out.print("> ");
                    mathArray[curIndex] = scanner.nextInt();

                    while (!(mathArray[curIndex] >= 0 && mathArray[curIndex] <= 100)) {
                        System.out.println("잘못 입력하셨습니다.");

                        System.out.println("수학 점수를 입력해주세요.");
                        System.out.print("> ");
                        mathArray[curIndex] = scanner.nextInt();
                    }

                    curIndex++;

                } else {
                    // 더이상 입력할 수 없음을 알린다.
                    System.out.println("5명을 초과한 학생의 정보는 더이상 입력하실 수 없습니다.");
                }

            } else if (userChoice == 2) {
                // 출력 코드 구현
                if (curIndex == 0) {
                    // 아직 입력된 학생이 존재하지 않으므로 경고 메시지만 출력
                    System.out.println("아직 입력된 학생이 존재하지 않습니다.");

                } else {
                    // 0번 인덱스부터 curIndex 보다 작은 인덱스까지 출력
                    for (int i = 0; i < curIndex; i++) {
                        System.out.println("----------------------------");
                        System.out.println(nameArray[i] + " 학생의 정보");
                        System.out.println("----------------------------");

                        // 이번에 출력할 학생의 번호
                        int id = idArray[i];

                        // 이번에 출력할 학생의 이름
                        String name = nameArray[i];

                        // 이번에 출력할 할생의 국어 점수
                        int korean = koreanArray[i];

                        // 이번에 출력할 학생의 영어 점수
                        int english = englishArray[i];

                        // 이번에 출력할 학생의 수학 점수
                        int math = mathArray[i];

                        // 총점
                        int sum = korean + english + math;

                        // 평균
                        double average = (double) sum / SUBJECT_SIZE;

                        System.out.printf("번호: %d번 이름: %s\n", id, name);
                        System.out.printf("국어: %03d점 영어: %03d점 수학: %03d점\n", korean, english, math);
                        System.out.printf("총점: %03d점 평균: %06.2f점\n", sum, average);

                        System.out.println("============================\n");
                    }

                }

            } else if (userChoice == 3) {
                // 종료 코드 구현
                System.out.println("사용해주셔서 감사합니다.");
                break;
            }
        }

        scanner.close();

    }
}

위 코드 리뷰중에서

//        int curIndex = 0;

curIndex는 다음에 입력'할' 인덱스를 저장한 int 변수로
curIndex를 사용하면
한명도 입력이 안된 상태에서 출력을 할 시에는
 "아직 입력된 학생의 정보가 없습니다"를 출력하거나
 혹은 5명을 초과하여 입력할 시에는
"더이상 입력하실 수 없습니다."라고 출력해줄 수 있고
출력 시에는 현재 입력된 학생들만 출력이 가능하도록 하는 기능을 가지게 했다.

 

이해를 잘하면 잘 할 수 있다,

:)