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
相关产品推荐
相关产品推荐

