Java中swapEven方法未实现数组偶元素对称交换问题排查
问题排查与修正
原代码的核心问题
- 循环范围错误:你用
for (int i = 0; i < array.length; i++)遍历整个数组,这会导致同一个对称对被处理两次——前半部分交换后,后半部分遍历到对称位置时又交换回去,最终数组看起来没变化。 - 冗余的计数器变量:
counter完全没必要,对称位置的索引直接用array.length - 1 - i就能和i一一对应。 - 未打印结果:main方法调用
swapEven后没有打印数组,你可能看不到实际修改后的结果(不过核心问题还是循环逻辑导致交换无效)。 - null处理无效:当输入数组为null时,方法内创建新数组
array = new int[]{};不会影响外部变量,因为Java是值传递,且void方法无需做此处理。
修正后的代码
import java.util.Arrays; public class FirstProgram { public static void main(String[] args) { int[] myArray = new int[]{100, 2, 3, 45, 33, 8, 4, 54}; swapEven(myArray); // 打印修改后的数组 System.out.println(Arrays.toString(myArray)); } public static void swapEven(int[] array) { if (array == null || array.length == 0) { // 空数组或null直接返回 return; } // 只遍历数组前半部分,避免重复交换 for (int i = 0; i < array.length / 2; i++) { int rightIndex = array.length - 1 - i; // 左右对称位置均为偶数才交换 if (array[i] % 2 == 0 && array[rightIndex] % 2 == 0) { int temp = array[i]; array[i] = array[rightIndex]; array[rightIndex] = temp; } } } }
是否需要创建新数组?
不需要。Java中数组是引用类型,方法接收的是数组的引用,直接修改数组内的元素会直接作用于原数组,无需创建新数组返回。你的方法是void类型,直接修改传入的数组即可生效。
内容的提问来源于stack exchange,提问作者Talatus
相关产品推荐
相关产品推荐

