Java实现数组元素反转输出错误,新手求解决方案
问题原因与修复方案
原代码核心错误
- 采用了多余的双层循环结构:数组逆序仅需要单轮双指针遍历,双层循环会导致元素被反复交换,最终回到接近原顺序的错误状态
- 双指针未同步递进:原逻辑中
start每次循环+1,但end每次都会重置为数组最后一位,完全不符合逆序交换的逻辑要求 - 硬编码数组长度:代码中多处写死长度为5,只要修改数组定义的长度就会触发逻辑错误
- 工具方法中直接调用
System.exit(0),会直接终止整个程序,灵活性极低
修复后代码
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { int[] arr = new int[5]; Scanner input = new Scanner(System.in); System.out.println("输入数组元素:"); for (int i = 0; i < arr.length; i++) { arr[i] = input.nextInt(); } reverse(arr); // 输出逆序后的数组 System.out.println(Arrays.toString(arr)); input.close(); } // 方法名改为更语义化的reverse static void reverse(int arr[]) { // 双指针单次循环即可 for (int start = 0, end = arr.length - 1; start < end; start++, end--) { int temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; } } }
改动说明
- 将双指针放在同一轮循环中,每次交换后
start右移、end左移,直到两个指针相遇就停止,仅需要遍历数组一半长度即可完成逆序,效率更高 - 所有长度判断改用
arr.length动态获取,修改数组长度不需要改动其他逻辑 - 移除了工具方法中的输出和程序终止逻辑,将输出放在主方法中,方法复用性更强
- 类名改为符合Java规范的大驼峰写法
Main,方法名改为语义化的reverse
内容的提问来源于stack exchange,提问作者Abhinav K
相关产品推荐
相关产品推荐

