Java如何从二维char数组中提取指定列并解决数组越界异常
问题原因
你使用的isbns是8行13列的二维数组,第一维(行)长度为8,第二维(每行的列)长度为13。你编写的方法存在两个核心逻辑错误:
- 存储提取结果的数组长度错误取了列数
arr[0].length(值为13),但提取单列时,每一行对应一个结果元素,结果数组长度应该等于行数arr.length(值为8) - 循环边界用了错误的结果数组长度13,导致访问
arr[i]时i超过了行的最大合法索引7,触发数组索引越界异常
修复方案
优化后的方法直接返回char[]避免不必要的装箱,同时增加参数合法性校验避免异常:
public static char[] getColumn(char[][] arr, int columnIndex) { // 空参数校验 if (arr == null || arr.length == 0) { return new char[0]; } // 列索引合法性校验 if (columnIndex < 0 || columnIndex >= arr[0].length) { throw new IllegalArgumentException("列索引超出合法范围"); } // 结果数组长度等于总行数 char[] column = new char[arr.length]; // 循环边界为总行数,遍历所有行提取指定列元素 for (int i = 0; i < arr.length; i++) { column[i] = arr[i][columnIndex]; } return column; }
调用示例:如果要提取第3列(索引从0开始计数),直接调用getColumn(isbns, 2)即可得到对应列的所有元素。
内容的提问来源于stack exchange,提问作者Berkay Bayar
相关产品推荐
相关产品推荐

