Java数组删除最小与最大值:代码仅对最大值生效问题求助
解决数组删除最小/最大值的问题
你的代码删除最小值失效主要有几个问题:
- 初始化
min为0,但数组里都是正数,nums[i] < min的条件永远不满足,导致min一直是0,数组里没有0,自然删不了 - 删除最大值后,数组的有效元素已经少了一个,但你后续找最小值还是遍历原数组长度,会读到最后一个重复的无效元素
- 删除元素时没终止循环,碰到多个相同最值会重复移动,导致数组混乱
给你修正后的代码:
public class delminmax { public static void main(String[] args) { int[] nums = {10, 50, 20, 90, 22}; int validLength = nums.length; // 用变量记录数组有效元素长度 // 找最大值 int max = nums[0]; for (int i = 1; i < validLength; i++) { if (nums[i] > max) max = nums[i]; } System.out.println("The max number is " + max); // 删除最大值 for (int i = 0; i < validLength; i++) { if (max == nums[i]) { for (int j = i; j < validLength - 1; j++) nums[j] = nums[j + 1]; validLength--; // 有效长度减1 break; // 找到后退出循环,避免重复处理 } } // 打印删除最大值后的数组 System.out.print("删除最大值后:"); for (int i = 0; i < validLength; i++) System.out.print(nums[i] + " "); System.out.println(); // 找最小值 int min = nums[0]; for (int i = 1; i < validLength; i++) { if (nums[i] < min) min = nums[i]; } System.out.println("The min number is " + min); // 删除最小值 for (int i = 0; i < validLength; i++) { if (min == nums[i]) { for (int j = i; j < validLength - 1; j++) nums[j] = nums[j + 1]; validLength--; break; } } // 打印最终数组 System.out.print("删除最小值后:"); for (int i = 0; i < validLength; i++) System.out.print(nums[i] + " "); } }
修改说明:
- 把
max和min的初始值设为数组第一个元素,而非0,确保能正确遍历找到最值 - 新增
validLength变量跟踪有效元素长度,每次删除后减1,后续遍历都基于这个长度,避免读到无效的重复元素 - 删除元素后加
break,找到第一个最值就停止,防止多次移动元素导致数组错乱 - 调整输出逻辑,只打印有效长度内的元素,结果更清晰直观
内容的提问来源于stack exchange,提问作者yury ting
相关产品推荐
相关产品推荐

