You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java影院预订系统如何在二维矩阵中保存并展示多个已预订座位

影院座位预订管理程序修复方案

问题原因

你当前的代码只声明了chosenRow和chosenColumn两个单个变量存储最新一次的预订座位,每次新的预订都会覆盖掉上一次的取值,所以展示座位时只能看到最新一次的预订记录,历史记录全部丢失。

需要新增/修改的逻辑

  • 新增二维数组存储所有座位的预订状态:在获取到影院的行数和列数之后,初始化一个二维数组用来记录每一个座位的预订状态,默认所有座位都是空闲状态。
  • 购票成功后更新数组状态:用户输入要预订的座位后,先校验座位是否合法、是否已经被预订,校验通过后将二维数组中对应位置的状态修改为已预订。
  • 调整座位展示逻辑:展示座位时直接遍历二维数组,根据数组中存储的状态输出S(空闲)或者B(已预订),替换原来仅比对最新一次预订座位的判断逻辑。
  • 可选优化:新增重复预订校验,避免同一个座位被多次售卖。

修改后的完整代码

import java.util.Scanner;

public class Cinema {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 价格配置
        int priceLessThan60pax = 10;
        int priceFirstHalf = 10;
        int priceSecondHalf = 8;

        // 输入影院尺寸
        System.out.println("Enter the number of rows:");
        int row = scanner.nextInt();
        System.out.println("Enter the number of seats in each row");
        int column = scanner.nextInt();
        System.out.println();

        int numberOfSeats = row * column;
        // 新增:二维数组存储座位状态,false代表空闲,true代表已预订
        boolean[][] seatStatus = new boolean[row + 1][column + 1];

        // 菜单循环
        while (true) {
            System.out.println("1: Show the seats");
            System.out.println("2. Buy a ticket");
            System.out.println("0. Exit");

            int menuSelection = scanner.nextInt();

            switch (menuSelection) {
                case 1:
                    System.out.println();
                    System.out.println("Cinema:");

                    // 打印表头
                    System.out.print("  ");
                    for (int i = 1; i <= column; i++) {
                        System.out.print(i + " ");
                    }
                    System.out.println();

                    // 修改:遍历二维数组输出座位状态
                    for (int i = 1; i <= row; i++) {
                        System.out.print(i + " ");
                        for (int j = 1; j <= column ; j++) {
                            if (seatStatus[i][j]) {
                                System.out.print("B ");
                            } else {
                                System.out.print("S ");
                            }
                        }
                        System.out.println();
                    }
                    System.out.println();
                    break;
                case 2:
                    System.out.println();
                    int chosenRow, chosenColumn;
                    // 输入加校验,避免非法输入和重复预订
                    while (true) {
                        System.out.println("Enter a row number:");
                        chosenRow = scanner.nextInt();
                        System.out.println("Enter a seat number in that row:");
                        chosenColumn = scanner.nextInt();
                        // 校验座位合法性
                        if (chosenRow < 1 || chosenRow > row || chosenColumn < 1 || chosenColumn > column) {
                            System.out.println("Wrong input! Please enter valid seat number.");
                            continue;
                        }
                        // 校验是否已预订
                        if (seatStatus[chosenRow][chosenColumn]) {
                            System.out.println("That ticket has already been purchased! Please choose another seat.");
                            continue;
                        }
                        break;
                    }

                    // 计算票价
                    if (numberOfSeats > 60) {
                        if (chosenRow <= (row / 2)) {
                            System.out.println("Ticket Price: $" + priceFirstHalf);
                        } else {
                            System.out.println("Ticket Price: $" + priceSecondHalf);
                        }
                    } else {
                        System.out.println("Ticket Price: $" + priceLessThan60pax);
                    }
                    // 新增:更新座位状态为已预订
                    seatStatus[chosenRow][chosenColumn] = true;
                    System.out.println();
                    break;
                default:
                    scanner.close();
                    return;
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者MightyBeef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 15:06:03