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

如何按列向下遍历二维数组?解决代码报错及不规则数组需求

二维数组按列遍历问题解决

问题根源

你的代码存在两个关键问题:

  1. 循环条件逻辑错误:外层循环的终止条件依赖array2d[currentRow].length,但内层循环结束后currentRow会被赋值为array2d.length(也就是3),此时访问array2d[3]直接触发数组越界异常。
  2. 遍历基准错误:按列遍历时,外层循环应该以总列数为基准,而非依赖动态变化的行变量。

修正后的常规二维数组按列遍历代码

int[][] array2d = 
{
    {4,5,3,8},
    {8,3,99,6},
    {5,7,9,1}
}; 

// 常规数组所有行列数一致,直接取第一行的列数作为总列数
int totalColumns = array2d[0].length;
// 外层循环遍历每一列
for (int currentColumn = 0; currentColumn < totalColumns; currentColumn++) {
    // 内层循环遍历当前列的每一行
    for (int currentRow = 0; currentRow < array2d.length; currentRow++) {
        System.out.println(array2d[currentRow][currentColumn]);
    }
}

不规则数组按列遍历实现

针对每行长度不同的不规则数组,需要先获取最大列数,同时遍历过程中判断当前行是否包含目标列,避免越界:

int[][] irregularArray = 
{
    {4,5},
    {8,3,99},
    {5,7,9,1,2}
}; 

// 先遍历所有行,找出最大列数
int maxColumns = 0;
for (int[] row : irregularArray) {
    if (row.length > maxColumns) {
        maxColumns = row.length;
    }
}

// 按列遍历,处理每行列数不一致的情况
for (int currentColumn = 0; currentColumn < maxColumns; currentColumn++) {
    for (int currentRow = 0; currentRow < irregularArray.length; currentRow++) {
        // 判断当前行是否存在该列,存在则输出,否则跳过或处理默认值
        if (currentColumn < irregularArray[currentRow].length) {
            System.out.println(irregularArray[currentRow][currentColumn]);
        }
        // 可选:列不存在时的处理逻辑
        // else { System.out.println("无此列数据"); }
    }
}

错误细节说明

你的代码中,第一次外层循环执行时currentRow=0,循环条件是currentColumn < 4,但内层循环结束后currentRow会被赋值为3(等于数组的行数),第二次外层循环判断时,array2d[3]超出了数组的行索引范围(行索引为0-2),直接抛出ArrayIndexOutOfBoundsException,导致循环仅执行完第一列就终止。

内容的提问来源于stack exchange,提问作者Axel K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:20:24