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

Java如何更新跟踪二维数组?影院选座购票后状态不更新问题求解

问题核心原因

  • 你当前每次调用seatsUI()方法时都会临时新建局部座位数组,方法执行完数组就销毁了,无法持久化存储历史购票的座位状态
  • 仅用buyTicketRow、buyTicketSeats两个变量保存最近一次购票的座位,之前的购票记录没有存储,自然每次渲染只能看到最新一次的标记

解决方案

核心是把座位数组改成类的成员变量,初始化的时候就生成全是S(可选座位)的状态,每次购票时直接修改这个成员数组的对应位置,渲染时直接读取该数组的状态即可,完全不会影响其他功能逻辑。


调整后的代码示例

修改点说明:

  1. 新增成员变量private char[][] seatArr; 用来持久化存储座位状态
  2. 在类的构造方法里初始化这个座位数组,所有座位默认设为S
  3. 购票成功时直接修改seatArr对应下标值为B,不需要额外存最后一次购票的行和列
  4. seatsUI()方法直接读取成员数组seatArr渲染,不需要每次新建数组
// 类内部新增成员变量,持久化存储座位状态
private char[][] seatArr;
// 假设你的类里已经有rows、seats两个成员变量存储总排数、总座位数
// 原有其他成员变量可以保留,不需要修改其他功能逻辑

// 在类的构造方法里初始化座位数组,这里的类名替换成你自己的类名即可
public 你的类名(int rows, int seats) {
    this.rows = rows;
    this.seats = seats;
    // 初始化所有座位为可选状态S
    this.seatArr = new char[rows][seats];
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < seats; j++) {
            seatArr[i][j] = 'S';
        }
    }
}

// 修改购票方法,购票时直接更新座位数组状态
public void buySeat(int row, int seat) {
    // 数组下标从0开始,用户输入的排数、座位号从1开始,所以要减1
    if(row >=1 && row <= rows && seat >=1 && seat <= seats && seatArr[row-1][seat-1] == 'S') {
        seatArr[row-1][seat-1] = 'B';
        // 这里可以加你的其他购票逻辑,比如算价格之类的,完全不影响
    }
}

// 修改seatsUI方法,直接读取成员数组渲染即可
public void seatsUI() {
    int number = Math.max(this.seats, this.rows);
    int[] filler = new int[number];
    for (int i = 0; i < number; i++) {
        filler[i] = i + 1;
    }
    System.out.println("Cinema:");
    System.out.print("  ");
    for (int i = 0; i < seats; i++) {
        System.out.print(filler[i] + " ");
    }
    System.out.println();

    for (int i = 0; i < rows; i++) {
        System.out.print(filler[i] + " ");
        for (int j = 0; j < seats; j++) {
            // 直接读取持久化的seatArr状态,不需要每次判断新建
            System.out.print(seatArr[i][j] + " ");
        }
        System.out.println();
    }
}

// 原来的rowToBuy、seatsToBuy方法如果其他地方没用可以删掉,有用的话保留也不影响逻辑

扩展说明

  • 如果后续需要支持退票,直接把对应位置的B改回S即可
  • 座位状态全部存在成员数组里,你其他功能需要读取座位状态直接访问seatArr就行,不会产生逻辑冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:06:02