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
相关产品推荐
相关产品推荐

