本文详解如何编写 removeEven() 方法过滤出整型数组中的奇数,并修复 printArray() 输出缺失方括号及尾部多余逗号的问题,确保输出严格符合 [1, 3, 5] 这类标准数组格式。
本文详解如何编写 `removeeven()` 方法过滤出整型数组中的奇数,并修复 `printarray()` 输出缺失方括号及尾部多余逗号的问题,确保输出严格符合 `[1, 3, 5]` 这类标准数组格式。
在 Java 编程中,从原始数组中提取满足条件的元素(如仅保留奇数)是一项基础但高频的操作。核心挑战不仅在于逻辑筛选,更在于结果数组的动态长度管理与输出格式的精确控制。以下将分步实现一个健壮、可读性强且输出规范的解决方案。
✅ 正确实现 removeEven():两遍扫描法(高效且易理解)
该方法采用经典的两遍扫描策略:第一遍统计奇数个数以确定新数组长度;第二遍填充数据。避免了 ArrayList 的自动装箱开销,也规避了预分配过大数组的空间浪费。
public static int[] removeEven(int[] arr) {
if (arr == null || arr.length == 0) {
return new int[0]; // 边界处理:空或 null 输入返回空数组
}
// 第一遍:统计奇数个数
int oddCount = 0;
for (int num : arr) {
if (num % 2 != 0) { // 注意:负数奇偶性由 % 运算符保证(Java 中 -3 % 2 == -1,故 != 0 即为奇数)
oddCount++;
}
}
// 第二遍:填充结果数组
int[] result = new int[oddCount];
int idx = 0;
for (int num : arr) {
if (num % 2 != 0) {
result[idx++] = num;
}
}
return result;
}
⚠️ 注意事项:
- num % 2 != 0 是判断奇数的安全方式,兼容正数、负数和零(0 % 2 == 0,被正确排除);
- 必须预先判空,防止 NullPointerException;
- 不建议使用 num % 2 == 1,因负奇数(如 -3)取模结果为 -1,会导致漏判。
✅ 修复 printArray():添加方括号 + 消除尾部逗号
原 printArray() 仅逐个打印 arr[i] + ", ",自然不带 [ 和 ],且末尾多出一个逗号。改进后需:
- 手动输出起始 [;
- 使用条件判断控制逗号:仅在非末尾元素后加 ,;
- 手动输出结尾 ]。
优化后的版本如下:
public static void printArray(int[] arr) {
if (arr == null || arr.length == 0) {
System.out.println("[]");
return;
}
System.out.print('[');
for (int i = 0; i <p>✅ 输出效果对比: </p>
- 输入 {1, 9, 3} → 输出 [1, 9, 3](无多余逗号,含方括号)
- 输入 {} → 输出 [](鲁棒性保障)
✅ 替代方案:使用 Arrays.toString()(简洁但需注意场景)
若项目允许依赖标准库,最简方式是直接调用:
public static void printArray(int[] arr) {
System.out.println(Arrays.toString(arr));
}
Arrays.toString(int[]) 内部已完美处理空数组、格式化、逗号与方括号——推荐在非教学/非定制化场景中优先使用。但理解手动实现逻辑,对掌握数组操作与格式控制至关重要。
? 总结
- removeEven() 的关键在于两次遍历:先计数再填充,确保新数组无冗余空间;
- printArray() 的格式问题本质是字符串拼接控制,需显式管理分隔符与边界符号;
- 始终进行 null 和空数组校验,提升代码健壮性;
- 理解 % 运算在负数下的行为,避免奇偶判断陷阱;
- 在实际开发中,善用 Arrays.toString() 可显著提升效率与可维护性。
通过以上实现,你不仅能准确输出 [1, 3, 5, 7, 9] 这样的标准格式,更能建立起对数组过滤与格式化输出的系统性认知。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











