Java数组元素重复代码异常:输出不符合预期的原因排查
代码无法正确实现数组元素重复的原因分析
你的代码逻辑偏离了“每个元素连续重复两次”的核心需求,且后续循环操作破坏了数据,导致输出不符合预期。下面一步步拆解问题:
1. 初始复制后的状态
第一个循环把原数组{4,16,8}复制到新数组前半部分,此时newArray为:[4, 16, 8, 0, 0, 0]
这一步本身没有问题。
2. 反向填充后半部分的错误
第二个循环试图把前半部分元素复制到后半部分,但采用了从后往前填充的方式:
- j=0:
newArray[5] = newArray[0]→ 数组变为[4,16,8,0,0,4] - j=1:
newArray[4] = newArray[1]→ 数组变为[4,16,8,0,16,4] - j=2:
newArray[3] = newArray[2]→ 数组变为[4,16,8,8,16,4]
此时后半部分是[8,16,4],和预期的[4,16,8]完全反向,这是第一个关键错误。
3. 混乱的元素交换操作
第三个循环的逻辑完全错误,它试图交换无关位置的元素,进一步破坏数组:
- i=0:将
newArray[1]替换为newArray[5]的值(4),同时把newArray[5]设为newArray[0]的值(4),数组变为[4,4,8,8,16,4] - i=1:将
newArray[2]替换为newArray[4]的值(16),把newArray[4]设为newArray[1]的值(4),数组变为[4,4,16,8,4,4] - i=2:无意义地将
newArray[3]的值替换为自身,再覆盖为newArray[2]的值(16),最终得到[4,4,16,16,4,4]
这一步完全没有实现“元素重复”的目标,反而把后半部分的有效数据覆盖成了错误值。
核心问题总结
你的代码没有直接针对“每个元素连续出现两次”的需求设计逻辑,而是通过绕弯的复制+反向填充+混乱交换,完全偏离了正确路径。
简单的正确实现
直接遍历原数组,将每个元素连续放入新数组的两个位置即可:
import java.util.Arrays; public class ArrayDuplicator { public static int[] duplicateElements(final int[] elements) { int[] newArray = new int[elements.length * 2]; for (int i = 0; i < elements.length; i++) { newArray[i * 2] = elements[i]; newArray[i * 2 + 1] = elements[i]; } return newArray; } public static void main(String[] args) { int[] input = new int[]{4, 16, 8}; System.out.println(Arrays.toString(duplicateElements(input))); } }
运行后会输出预期的[4, 4, 16, 16, 8, 8]。
内容的提问来源于stack exchange,提问作者WhosWho
相关产品推荐
相关产品推荐

