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

Java如何反转int数组?新手编写反转逻辑出现半反转问题求助

问题根因

你写的反转逻辑本质是交换数组对称位置的元素,但你的for循环遍历了整个数组的所有索引,导致每对对称位置的元素被交换了两次,最终回到初始状态。
举个例子,假设你的数组长度是4,索引对应0、1、2、3:

  • 当i=3时,交换索引3和0的元素
  • 当i=2时,交换索引2和1的元素
  • 这时候数组已经完成反转了,但循环还会继续执行:
    • 当i=1时,再次交换索引1和2的元素,把上一步的交换操作还原
    • 当i=0时,再次交换索引0和3的元素,把第一步的交换操作还原
      100个元素的数组也是同理,遍历到第50个元素时已经完成了全部反转,剩下的50次循环全部在做还原操作,所以你看到的结果就是只反转了一半就恢复原序。

修复方案

把循环的终止条件改成只遍历数组的前半段即可,两种修改方式都可以:

方式1:正序遍历前半段(更常用)

//create a method to reverse the array
public static void makeNewArray(){
    System.out.println("\nReversed Array:\n");
    // 只遍历到数组长度的一半即可
    for(int i=0; i < numArray.length / 2; i++){
        int temp = numArray[i];
        numArray[i] = numArray[numArray.length - i - 1];
        numArray[numArray.length - i - 1] = temp;
    }
    // 反转完成后再打印整个数组,避免中间过程干扰
    for(int i=0; i < numArray.length; i++){
        System.out.print("index " + (i+1) + ": "+ numArray[i] + ", ");
    }
}

方式2:保留你的倒序遍历逻辑,修改终止条件

//create a method to reverse the array
public static void makeNewArray(){
    System.out.println("\nReversed Array:\n");
    // 倒序遍历到数组中间位置就停止
    for(int i=numArray.length-1; i >= numArray.length / 2; i--){
        int temp = numArray[i];
        numArray[i] = numArray[numArray.length - i - 1];
        numArray[numArray.length - i - 1] = temp;
    }
    // 打印反转后的数组
    for(int i=0; i < numArray.length; i++){
        System.out.print("index " + (i+1) + ": "+ numArray[i] + ", ");
    }
}

额外建议

你原来的代码把打印逻辑写在交换的循环里,打印的是交换过程中的中间值,容易干扰你对最终结果的判断,建议把反转逻辑和打印逻辑拆分,等全部交换完成后再统一打印结果。

内容的提问来源于stack exchange,提问作者rj7699

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:18:01