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

Java传递二维char数组为方法参数时出现数组索引越界错误

问题根因

报错的核心原因是数组创建时机错误:

  1. 类的静态int成员变量row、column默认初始值为0,你在main方法中先执行了char[][] table = new char[row][column];,此时还没调用enterRowColumn()给两个变量赋值,创建出来的二维数组第一维长度为0,是个空数组。
  2. 数组一旦创建完成,长度就固定了,后续调用enterRowColumn()修改静态变量row、column的值,不会改变已经创建好的table数组的尺寸。
  3. 执行初始化方法循环时,尝试访问空数组的索引0位置,就会抛出Index 0 out of bounds for length 0的越界错误,和第90行的赋值逻辑本身没有关系。
修复方案

调整main方法中的执行顺序:先调用输入方法拿到合法的行列值,再创建对应尺寸的二维数组,最后执行初始化操作。
修正后的核心代码如下:

public class Cinema {
    public static int row, column, x, y;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 第一步:先获取用户输入的行列值,给静态变量row、column赋值
        enterRowColumn();
        // 第二步:拿到正确的行列值后,再创建对应尺寸的二维数组
        char[][] table = new char[row][column];
        // 第三步:初始化数组
        initializeTable(table);
    }

    // 原有输入行列的方法保持原有逻辑即可
    public static void enterRowColumn() {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入行数:");
        row = sc.nextInt();
        System.out.print("请输入列数:");
        column = sc.nextInt();
    }

    public static void initializeTable(char[][] table) {
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < column; j++) {
                table[i][j] = 'S';
            }
        }
    }
}

可选优化

可以在创建数组前增加校验逻辑,判断用户输入的row、column是否为正整数,避免输入0、负数时再次触发数组尺寸非法的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:03:23