Java删除数组中等于指定值元素时运行结果异常问题排查
问题原因
你的代码存在3个核心问题,直接导致输出不符合预期:
- 外层
for循环结构不完整,缺少循环变量步进语句i++,循环执行时i的递增逻辑完全错误,导致元素匹配、移动逻辑混乱。 - 声明的
count变量没有实际作用,你原本应该用它记录删除元素的数量,当前写的count--逻辑完全错误。 - Java数组是定长结构,你将匹配元素后的所有元素前移后,数组尾部的冗余旧值不会自动消失,直接遍历整个数组输出就会打印出多余的尾部元素。
修复代码
原逻辑直接修复
补全循环结构,修正计数逻辑,输出时截断尾部冗余元素即可:
int removeCount = 0; // 补全for循环的i++步进语句 for(int i=0; i < stringArr.length; i++){ if(stringArr[i].equals(value)){ removeCount++; for(int j= i; j < stringArr.length-1; j++){ stringArr[j] = stringArr[j+1]; } i--; } } // 只输出前length - removeCount个有效元素 for (int i = 0; i < stringArr.length - removeCount; i++) { System.out.print(stringArr[i] + " "); }
更高效的双指针实现(时间复杂度O(n),无需嵌套循环)
推荐用这种写法,性能更好,逻辑也更清晰:
// slow指针记录有效元素的存放位置 int slow = 0; for(int fast = 0; fast < stringArr.length; fast++){ if(!stringArr[fast].equals(value)){ stringArr[slow] = stringArr[fast]; slow++; } } // 输出前slow个有效元素 for (int i = 0; i < slow; i++) { System.out.print(stringArr[i] + " "); }
运行以上任意一种修复后的代码,示例输入的输出结果都是hello bye ,符合预期。
内容的提问来源于stack exchange,提问作者trix junie
相关产品推荐
相关产品推荐

