本文详解如何编写 removeEven() 方法过滤出整型数组中的奇数,并修复控制台输出时缺失方括号及末尾多余逗号的问题,确保结果以标准 [1, 3, 5] 格式显示。
本文详解如何编写 `removeeven()` 方法过滤出整型数组中的奇数,并修复控制台输出时缺失方括号及末尾多余逗号的问题,确保结果以标准 `[1, 3, 5]` 格式显示。
在 Java 编程中,从原始数组中提取满足条件的元素(如仅保留奇数)是常见需求。核心挑战在于:既要正确筛选数据,又要保证输出格式符合预期——尤其是避免常见的“末尾多一个逗号”或“缺少方括号”问题。
以下是一个完整、健壮的实现方案:
✅ 正确实现 removeEven() 方法
该方法采用两遍扫描策略:第一遍统计奇数个数以精确分配新数组长度;第二遍填充奇数值。这避免了使用动态集合(如 ArrayList)再转数组的额外开销,也确保返回数组无冗余空间。
public static int[] removeEven(int[] arr) {
if (arr == null || arr.length == 0) {
return new int[0];
}
// 第一遍:统计奇数个数
int oddCount = 0;
for (int num : arr) {
if (num % 2 != 0) {
oddCount++;
}
}
// 第二遍:填充结果数组
int[] result = new int[oddCount];
int idx = 0;
for (int num : arr) {
if (num % 2 != 0) {
result[idx++] = num;
}
}
return result;
}✅ 规范化输出:添加方括号 + 消除末尾逗号
原 printArray() 方法直接拼接 ", " 导致输出为 1, 3, 5,(含多余逗号和无括号)。修正要点:
立即学习“Java免费学习笔记(深入)”;
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 手动打印 '[' 和 ']'
- 使用条件判断控制逗号分隔逻辑(仅非末尾元素后加逗号)
优化后的 printArray() 如下:
public static void printArray(int[] arr) {
if (arr == null || arr.length == 0) {
System.out.println("[]");
return;
}
System.out.print('[');
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
if (i < arr.length - 1) {
System.out.print(", ");
}
}
System.out.println(']');
}? 注意事项:
- 必须处理空数组或 null 输入,否则会触发 NullPointerException 或越界异常;
- 不推荐直接使用 Arrays.toString(arr) 替代自定义打印(尽管它能自动格式化),因为本题明确要求理解底层数组操作逻辑;
- 若后续需扩展功能(如支持负数、大整数),当前取模逻辑 num % 2 != 0 仍完全适用——Java 中负奇数对 2 取模结果为 -1,故判断 != 0 是安全且通用的。
✅ 完整可运行示例
import java.util.Arrays;
public class LabProgram {
public static void printArray(int[] arr) {
if (arr == null || arr.length == 0) {
System.out.println("[]");
return;
}
System.out.print('[');
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
if (i < arr.length - 1) System.out.print(", ");
}
System.out.println(']');
}
public static int[] removeEven(int[] arr) {
if (arr == null || arr.length == 0) return new int[0];
int oddCount = 0;
for (int num : arr) if (num % 2 != 0) oddCount++;
int[] result = new int[oddCount];
int idx = 0;
for (int num : arr) if (num % 2 != 0) result[idx++] = num;
return result;
}
public static void main(String[] args) {
int[] arr1 = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int[] arr2 = {1, 9, 3};
int[] arr3 = {2, 4, 6}; // 全偶数 → 返回空数组
System.out.print("Input: "); printArray(arr1); System.out.print("Output: "); printArray(removeEven(arr1));
System.out.print("Input: "); printArray(arr2); System.out.print("Output: "); printArray(removeEven(arr2));
System.out.print("Input: "); printArray(arr3); System.out.print("Output: "); printArray(removeEven(arr3));
}
}输出效果:
Input: [1, 2, 3, 4, 5, 6, 7, 8, 9] Output: [1, 3, 5, 7, 9] Input: [1, 9, 3] Output: [1, 9, 3] Input: [2, 4, 6] Output: []
通过以上设计,你不仅能准确完成逻辑过滤,还能输出专业、整洁、符合编程惯例的数组表示形式。

















