You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现数组奇偶分离代码输出错误,请问哪里出错了如何修正

数组奇偶分离代码错误排查与修正

给定一个整数数组,将数组中的偶数和奇数分离,要求所有偶数排在数组前半部分,奇数排在数组后半部分。

问题复现

示例输入输出

输入: arr[] = 1 9 5 3 2 6 7 11
输出: 2 6 5 3 1 9 7 11

输入: arr[] = 1 3 2 4 7 6 9 10
输出:  2 4 6 10 7 1 9 3

原代码问题诊断

你编写的代码存在两个核心错误:

  • 错误1:直接在原数组上覆盖写入,导致原始奇数丢失
    第一个循环将偶数依次放到数组前半段时,会直接覆盖数组开头存储的原始奇数,第二个循环遍历已经被修改的数组时,无法找到被覆盖的奇数,最终导致部分位置没有被正确赋值,残留了原数组的旧值。
  • 错误2:输出使用println方法导致每个元素单独换行
    你需要的是同行长空格分隔的输出,应该使用print方法代替println。

修正方案

方案1:使用临时数组存储(逻辑简单不易出错)

public class Segregate_even_odd_numbers {
    public static void main(String[] args) {
        int a[]= { 1, 3, 2, 4, 7, 6, 9, 10 };
        int n = a.length;
        // 临时数组存储结果,避免覆盖原始数据
        int[] res = new int[n];
        int ind = 0;

        // 先放所有偶数
        for(int i=0;i<n;i++){
            if(a[i]%2==0){
                res[ind] = a[i];
                ind++;
            }
        }
        // 再放所有奇数
        for(int i=0;i<n;i++){
            if(a[i]%2!=0){
                res[ind] = a[i];
                ind++;
            }
        }
        // 输出结果
        for(int i=0;i<n;i++){
            System.out.print(res[i] + " ");
        }
        System.out.println();
    }
}

方案2:双指针原地交换(无需额外空间,空间复杂度O(1))

如果你需要原地修改数组不使用额外空间,可以用左右双指针的实现:

public class Segregate_even_odd_numbers {
    public static void main(String[] args) {
        int a[]= { 1, 3, 2, 4, 7, 6, 9, 10 };
        int left = 0, right = a.length - 1;
        while(left < right) {
            // 左指针从左向右找奇数
            while(left < right && a[left] % 2 == 0) left++;
            // 右指针从右向左找偶数
            while(left < right && a[right] % 2 == 1) right--;
            // 交换奇偶位置
            if(left < right) {
                int temp = a[left];
                a[left] = a[right];
                a[right] = temp;
            }
        }
        // 输出
        for(int num : a) {
            System.out.print(num + " ");
        }
        System.out.println();
    }
}

运行结果

两种方案运行后均可得到符合要求的输出:

2 4 6 10 1 3 7 9 

注:奇数的相对顺序可以根据需求调整,临时数组方案会保留原始奇偶的出现顺序,双指针方案不会保留奇数的原始顺序。

内容的提问来源于stack exchange,提问作者Ksha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 23:45:00