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

Java中swapEven方法未实现数组偶元素对称交换问题排查

问题排查与修正

原代码的核心问题

  1. 循环范围错误:你用for (int i = 0; i < array.length; i++)遍历整个数组,这会导致同一个对称对被处理两次——前半部分交换后,后半部分遍历到对称位置时又交换回去,最终数组看起来没变化。
  2. 冗余的计数器变量:counter完全没必要,对称位置的索引直接用array.length - 1 - i就能和i一一对应。
  3. 未打印结果:main方法调用swapEven后没有打印数组,你可能看不到实际修改后的结果(不过核心问题还是循环逻辑导致交换无效)。
  4. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 06:25:06