Java实现删除数组最大值功能代码运行异常求排查
问题排查
- 第一处逻辑错误:缺失「查找数组最大值」的前置步骤,你代码中的判断条件
a[i] > a[j]完全不符合需求,这里的j是用来给返回数组b计数的下标,和最大值判断没有任何关联。 - 第二处赋值错误:if分支中你给b数组赋值的是
a[j]而非当前遍历到的原数组元素a[i],且仅在满足错误的if条件时才赋值,会导致b数组大部分位置都是未赋值的默认0值。 - 第三处边界问题:没有判断输入数组的长度,如果输入数组长度为1,初始化b数组时会直接生成长度为0的空数组,建议提前做边界校验。
修复后代码
如果需要删除数组中所有的最大值(包含重复的最大值场景),可以用以下实现:
public static int[] deleteHighestNum(int a[]) { // 边界校验 if (a == null || a.length <= 1) { return new int[0]; } // 第一步:遍历找到最大值 int max = a[0]; for (int num : a) { if (num > max) { max = num; } } // 第二步:统计非最大值的元素数量,确认返回数组的长度 int count = 0; for (int num : a) { if (num != max) { count++; } } // 第三步:赋值生成返回数组 int[] b = new int[count]; int index = 0; for (int num : a) { if (num != max) { b[index++] = num; } } return b; }
如果仅需要删除第一个出现的最大值,忽略后续重复的最大值,可以用更简洁的实现:
public static int[] deleteHighestNum(int a[]) { if (a == null || a.length <= 1) { return new int[0]; } // 查找第一个最大值的下标 int maxIndex = 0; for (int i = 1; i < a.length; i++) { if (a[i] > a[maxIndex]) { maxIndex = i; } } // 跳过最大值下标赋值新数组 int[] b = new int[a.length - 1]; for (int i = 0, j = 0; i < a.length; i++) { if (i != maxIndex) { b[j++] = a[i]; } } return b; }
内容的提问来源于stack exchange,提问作者green_dino
相关产品推荐
相关产品推荐

