如何提取二维数组各子数组的最大值存入新数组?报数组越界错误

问题描述
尝试从名为array的二维数组的每个嵌套子数组中提取最大元素,将所有最大值存入独立的新数组,运行时触发*out of bounds(数组越界)*错误,多次调整思路仍未解决。
越界原因排查
二维数组遍历出现越界,基本都是索引边界设置错误导致,最常见的触发场景有3种:
- 遍历内层子数组时,循环终止条件误用了外层二维数组的长度,没有取当前子数组自身的长度
- 存储最大值的结果数组初始化长度和外层二维数组包含的子数组总数不匹配
- 嵌套循环里的索引计数变量累加逻辑混乱,下标值超过了数组的实际索引范围(数组索引从0开始,最大可访问下标为数组长度减1)
正确实现参考
以JavaScript为例,可直接对照修改你的代码:
// 示例二维数组 const array = [[1, 3, 5, 2], [7, 2, 9, 4], [0, 8, -1, 6]]; // 结果数组长度和外层二维数组长度保持一致,避免存值时越界 const maxResult = new Array(array.length); for (let i = 0; i < array.length; i++) { // 初始化当前子数组最大值为子数组第一个元素 let subArrMax = array[i][0]; // 注意:内层循环边界必须取当前子数组array[i]的长度 for (let j = 1; j < array[i].length; j++) { if (array[i][j] > subArrMax) { subArrMax = array[i][j]; } } maxResult[i] = subArrMax; } console.log(maxResult); // 输出 [5, 9, 8]
如果是Java语言,参考实现如下:
public class MaxExtractor { public static void main(String[] args) { int[][] array = {{1, 3, 5, 2}, {7, 2, 9, 4}, {0, 8, -1, 6}}; int[] maxResult = new int[array.length]; for (int i = 0; i < array.length; i++) { int subArrMax = array[i][0]; // 核心:内层循环遍历长度取当前子数组的length for (int j = 1; j < array[i].length; j++) { if (array[i][j] > subArrMax) { subArrMax = array[i][j]; } } maxResult[i] = subArrMax; } } }
快速定位技巧:在循环里打印当前的索引值和对应数组的实际长度,对比索引值是否大于等于数组长度,就能立刻定位到写错边界的位置。
内容的提问来源于stack exchange,提问作者Bailey Long
相关产品推荐
相关产品推荐

