数组最大值的最大索引求解:代码问题排查求助
问题排查与修复方案
咱们来一步步拆解这段代码的问题,以及如何修复它:
存在的问题
未处理空数组与空指针风险
这段代码完全没做边界校验:- 如果传入的
vector是null,访问vector.length或者数组元素时会直接抛出NullPointerException - 如果传入的是长度为0的空数组,代码会直接返回
0,但此时数组里根本没有元素,这个返回值完全没有意义,甚至会导致后续逻辑出错
- 如果传入的
参数命名易混淆
参数名vector在Java语境下通常指java.util.Vector这个集合类,而你这里传入的是基本类型数组,用这个名字容易让其他开发者误解,建议改成更贴合语义的名字,比如numbers或者arr(可选)缺乏文档注释
虽然不是语法错误,但作为工具方法,没有注释说明功能、参数和返回值的语义,不利于后续代码维护
修复后的代码
结合你的需求(找最大值对应的最大索引),我们加上边界校验、优化命名后的代码如下:
/** * 找出数组中最大值对应的最大索引 * @param numbers 非空的int类型数组 * @return 最大值的最大索引 * @throws IllegalArgumentException 如果传入空数组或null */ static int maxIndex(int[] numbers) { // 边界校验 if (numbers == null || numbers.length == 0) { throw new IllegalArgumentException("数组不能为null或空"); } int maxIndex = 0; for (int i = 1; i < numbers.length; i++) { // 当当前元素大于等于当前最大值时更新索引,保证多个最大值时取最大的索引 if (numbers[i] >= numbers[maxIndex]) { maxIndex = i; } } return maxIndex; }
关于原逻辑的正确性
值得一提的是,你原代码中if (vector[i] >= vector[maxIndex])的逻辑是正确的——当遇到和当前最大值相等的元素时,更新索引为当前i,遍历结束后就能得到最大值对应的最大索引,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Oliver Bäckström
相关产品推荐
相关产品推荐

