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

Java文字RPG三维tile数组遍历出现下标越界错误该如何解决?

问题根因

你定义的三维int数组中,最内层的所有子数组都使用空大括号{}初始化,这意味着tiles[楼层][行]对应的一维数组长度为0,当你尝试访问tiles[0][i][j]时,本质是对长度为0的数组执行下标取值操作,自然会抛出Index 0 out of bounds for length 0的越界异常。

修复方案

根据你的业务需求可以选择以下两种修复方式:

方案1:简化为二维数组(更适配你的场景)

从注释的坐标标注、以及只需要存单个地砖类型值的需求来看,你其实不需要三维数组,直接使用7x7的二维数组即可:

// 定义7行7列的二维地砖数组,初始化后每个位置默认值为0
private int[][] tiles = new int[7][7];

对应的遍历逻辑调整为:

public void create_grid() {
    boolean door_set = false;
    for (int i = 0; i < 7; i++) {
        for (int j = 0; j < 7; j++) {
            if (tiles[i][j] != 2) {
                tiles[i][j] = d1.tile_spawn();
            }
        }
    }
}

方案2:保留三维数组,补全初始化逻辑

如果你确实需要使用三维数组(比如第一层存房间ID、图层ID等),只需要给最内层数组分配对应的存储空间即可:

// 第一层长度7(比如对应7个房间),每个房间为7行7列网格,每个网格存1个地砖类型值
private int[][][] tiles = new int[7][7][1];

如果要沿用你原来的静态初始化写法,把所有空的{}替换为{0}即可:

private int[][][] tiles = {
    /* 0,0     0,1     0,2     0,3     0,4     0,5     0,6  */
    { {0},     {0},     {0},     {0},     {0},     {0},    {0} },
    /* 其余行按相同格式替换内层空括号即可 */
    ...
};
优化建议

建议后续循环时使用数组本身的length属性控制边界,避免后续调整数组大小时还需要同步修改循环硬编码值:

// 三维数组场景的循环写法示例
for (int i = 0; i < tiles[0].length; i++) {
    for (int j = 0; j < tiles[0][i].length; j++) {
        if (tiles[0][i][j] != 2) {
            tiles[0][i][j] = d1.tile_spawn();
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:06:03