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

Java实现负数前置正数后置数组未更新,求错误排查

问题分析与解决

你的代码运行后数组无变化的核心问题是**Swap方法的参数传递错误**。Java中基本数据类型是值传递,直接传递arr[mid]、arr[end]这类int值时,方法内部交换的只是这两个值的局部副本,完全不会修改原数组中的元素。

修正方案

将Swap方法改为接收数组和要交换的元素索引,这样才能真正修改数组内的元素:

private static void Swap(int[] arr, int i, int j) {
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}

同时修改调用处的代码,传入数组和对应索引:

  • 把Swap(arr[mid],arr[end])改为Swap(arr, mid, end)
  • 把Swap(arr[mid],arr[start])改为Swap(arr, mid, start)

修正后的完整代码

public class posbeginnegend {

    private static void Swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    public static void main(String[] args) {
        int []arr={45,23,-89,-21,67,-34,7,-44};

        int start=0;
        int end=arr.length-1;

        while(start<=end)
        {
            int mid=start+(end-start)/2;

            if(arr[mid]>0)
            {   if(arr[end]>0)
                {
                    end--;
                }
                else
                {
                    Swap(arr, mid, end);
                    end--;
                }
            }
            else
            {
                if(arr[start]<0)
                {   
                    start++;
                }
                else
                {
                    Swap(arr, mid, start);
                    start++;
                }
            }
        }
        for(int i=0;i<=arr.length-1;i++)
        {System.out.print(arr[i]+ " ");}
    }
}

运行这段代码后,数组会按要求将负数移至开头、正数移至末尾。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 06:30:06