Java方法内修改整数数组:removeOdd方法实现求助
问题分析与修复方案
你的代码有两个核心问题导致输出不符合预期:
- 遍历范围错误:第二个循环用
i < evenCount作为终止条件,这会导致你只遍历原数组的前evenCount个元素,而非题目要求的前size个元素,会漏掉后面的偶数。 - 数组引用赋值无效:Java中数组作为参数传递时,方法内的
values是原数组引用的副本,执行values = newValues只是修改了方法内局部变量的引用,不会改变main方法里原数组的内容,所以main方法仍会输出原数组的前sizeAfter个元素。
正确的实现方式是在原数组内部原地修改,把偶数元素移动到数组的前半部分,不需要新建数组。具体代码如下:
int index = 0; for (int i = 0; i < size; i++) { if (values[i] % 2 == 0) { values[index] = values[i]; index++; } } return index;
代码逻辑说明
- 用
index变量记录当前要存放偶数的位置,初始为0。 - 遍历原数组的前
size个元素,每遇到一个偶数,就把它放到values[index]的位置,然后index自增。 - 遍历结束后,
index的值就是剩余偶数的数量,直接返回即可。原数组的前index个元素就是所有的偶数,main方法遍历前sizeAfter个元素时就能得到正确结果。
测试这个实现后,第一个测试用例的数组a会被修改为[22, 98, 46, 82, 24, 53, 82, 24, 11, 19],main方法只输出前5个元素,符合预期;第二个测试用例的前7个元素都是奇数,index保持0,输出空数组,也符合预期。
内容的提问来源于stack exchange,提问作者KayBirdy
相关产品推荐
相关产品推荐

