如何按列遍历列长不固定的二维数组且避免数组下标越界异常
错误原因
你提供的代码触发数组越界的核心问题是下标遍历逻辑不匹配:
v.length为二维数组的行数(示例中共有5行),外层循环以v.length作为上限,相当于把行数直接当作最大列数使用,当列下标超过某一行的实际长度时,访问v[j][i]就会越界。- 内层循环的边界取
v[i].length(第i行的长度),但内层循环变量j是行下标,二者逻辑完全不对应。
实现思路
- 先遍历所有行,计算出最长行的长度,即最大列数
- 外层循环遍历每一列索引,从0到最大列数-1
- 内层循环遍历每一行,仅当当前行的长度大于当前列索引时,取出对应元素
- 按要求拼接元素,用逗号分隔
代码实现
public class Main { public static void main(String[] args) { // 修正原数组初始化的语法错误 int[][] v = {{1,2,3}, {4,5}, {6,4,3}, {1}, {7,8,9}}; // 计算最大列数 int maxCol = 0; for (int[] row : v) { maxCol = Math.max(maxCol, row.length); } // 按列遍历拼接结果 StringBuilder result = new StringBuilder(); for (int col = 0; col < maxCol; col++) { for (int row = 0; row < v.length; row++) { if (col < v[row].length) { if (result.length() > 0) { result.append(","); } result.append(v[row][col]); } } } // 输出结果 System.out.println(result.toString()); } }
运行上述代码将直接输出你需要的结果:1,4,6,1,7,2,5,4,8,3,3,9
内容的提问来源于stack exchange,提问作者tutorguru
相关产品推荐
相关产品推荐

