IT공부/JAVA

[JAVA] 2차원배열 이용한 영화관 좌석 예매 시스템

재삐 2023. 12. 24. 18:34
반응형

[그림. 문제]

 

[그림. 결과화면]

 

- 영화관 좌석 예매 프로그램 - 

1. 배열 선언과 초기화 그리고 좌석번호 할당

2. 배열 출력

3. 사용자에게 번호를 입력 받음

4. 입력한 번호를 2차원 배열에 맞는 값으로 계산

5. 이미 예약된 좌석 예매실패 표시

6. 구현 영상

7. 코드

 

 

1. 영화관자리 세로 6, 가로 10 크기의 방을 만들고 1~60까지 번호 할당

cnt를 이용하여 1씩 증가되게 할당

 

2. 2차원 배열 출력

 

3. 사용자에게 번호를 입력받게 하여

-> 0을 입력했을 때 무한루프를 종료

-> 1보다 작거나 60보다 큰 숫자를 입력시 좌석번호를 정확히 입력하라는 문구 출력

 

4. 입력한 수와 배열의 위치를 비교하는게 너무나 머리아팠다...

format이 안맞는 에러발생 (reservation에는 " X" 값이 들어가 있다

공책에 적어가며

seats[0][0] = 1

seats[1][3] = 14

seats[1][9] = 20

행을 i 열을 j라 생각하고

i+j+1 =  numSeat라는 생각도 해보았는데

이렇게하면 seats[2][1]과 seats[1][2]의 값이 같아서 둘다 X로 예매가 되었다. 버그버그!!

그러다가 chatGPT에 물어보고...

이런 공식을 찾았는데 맞아 떨어지더라

예를들어 seats[1][2] = 13번 자리이면
row => (13 - 1) => 11 / 10 => 1
col => (13 - 1) => 12 % 10 => 2

 

5. 4.의 공식을 이용하여 배열의 값이 " X"이면 실패, 아니면 " X"값을 할당

 

 

6. 구현 영상

 

7. 전체 코드 File : HomeWork.java

import java.util.Scanner;

public class HomeWork {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        String reservation = " X"; // 예매한 좌석 X로 표시
        boolean stop = false; // 무한루프 돌리기 Flag

        //배열 선언과 초기화
        String[][] seats = new String[6][10];
        // 영화관 자리에 번호 할당
        int cnt = 0;
        for (int i = 0; i < seats.length; i++) {
            for (int j = 0; j < seats[i].length; j++) {
                // seats[i][j] = ++cnt + "";
                seats[i][j] = String.format("%2d", ++cnt);
            }
        }

        while (!stop) {  // 0을 입력 받으면 종료되게

            // 배열 출력 (좌석표시)
            System.out.println("-----------[스크린]-----------");
            for (int i = 0; i < seats.length; i++) {
                for (int j = 0; j < seats[i].length; j++) {
                    System.out.print(seats[i][j] + " ");
                }
                System.out.println();
            }
            System.out.println("-----------------------------");
            System.out.print("영화관 좌석을 선택하세요 (0:종료) : ");
            // 입력받기
            int numSeat = scanner.nextInt();

            if (numSeat == 0) { // 0을 입력했을 때 종료
                System.out.println("종료");
                stop = true;
            } else if (numSeat < 1 || numSeat > 60) {
                System.out.println("[경고] 좌석번호를 정확히 입력해 주세요");
            } else {
                // 좌석 번호에 해당하는 행과 열 계산
                int row = (numSeat - 1) / 10;
                int col = (numSeat - 1) % 10;

                // 이미 예약된 좌석인지 확인
                if (seats[row][col].equals(reservation)) {  // 배열의 값이 " X"인지 확인
                    System.out.println("[실패] 이미 예약된 좌석입니다. 다른 좌석을 선택");
                } else {
                    // 좌석 예약
                    seats[row][col] = reservation; // 배열의 값을 " X"로 변경
                }
            }
            System.out.println();
        } // While 종료
    } // Main 종료
} // HomeWork 종료
반응형