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

Java实例变量二维数组调用initialise方法后值未变更问题咨询

问题根因

  • 核心问题是变量遮蔽:你在initialise()方法内部重新定义了一个和类成员变量同名的局部变量Seat[][] seatArray,后续所有数组赋值操作都是针对这个局部变量生效的,方法执行结束后局部变量被回收,类成员变量seatArray完全没有被修改,所以调用toString()时访问的还是未被正确初始化的成员变量,就会出现异常。
  • 额外存在两处逻辑错误:
    1. 类初始化时numberOfRows和numberOfColumns默认值为0,如果你调用initialise()前没有给这两个变量赋值大于0的有效值,就算操作的是成员变量,创建的也是长度为0的空数组,无法正常存储元素
    2. 数组下标从0开始计数,你判断j == this.numberOfColumns会直接触发数组越界异常

修复方案

  1. 删除initialise()方法内部的局部变量声明,直接操作类成员变量:
    将方法内第一行Seat[][] seatArray = new Seat[numberOfRows][numberOfColumns];修改为this.seatArray = new Seat[numberOfRows][numberOfColumns];
  2. 修复越界判断逻辑:将j == this.numberOfColumns修改为j == this.numberOfColumns - 1
  3. 优化成员变量定义:既然数组需要根据行列数动态创建,类定义阶段不需要预先初始化10*7的无用数组,直接声明为Seat[][] seatArray;即可
  4. 调整执行顺序:保证调用initialise()之前,已经完成numberOfRows和numberOfColumns的有效值赋值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:39:05