Java数组反转失效求助:代码未实现预期反转效果
问题原因与解决方案
你的反转数组代码问题出在循环遍历了整个数组。当你把前半部分元素和后半部分对应位置交换后,循环继续执行到后半段时,又会把已经交换好的元素换回去,最终数组回到初始状态。
拿你的长度为5的数组举例:
- i=0:交换索引0和4 → 数组变成
[50,20,30,40,10] - i=1:交换索引1和3 → 数组变成
[50,40,30,20,10] - i=2:交换索引2和2(无变化)
- i=3:交换索引3和1 → 数组变回
[50,20,30,40,10] - i=4:交换索引4和0 → 数组变回原数组
[10,20,30,40,50]
修正后的代码
只需要把循环条件改成i < arr.length / 2,让循环只执行前半段元素的交换即可:
public class Reversing_array { public static void reverse_arr(int arr[]) { int n = arr.length - 1; // 仅遍历数组前半部分,避免重复交换 for (int i = 0; i < arr.length / 2; i++) { int temp = arr[i]; arr[i] = arr[n - i]; arr[n - i] = temp; } } public static void main(String[] args) { int arr[] = { 10, 20, 30, 40, 50 }; reverse_arr(arr); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } }
运行后会输出正确的反转结果:50、40、30、20、10。
内容的提问来源于stack exchange,提问作者Akhil Agrawal
相关产品推荐
相关产品推荐

