Arraylist 输出重复

Arraylist outputs duplicate

我正在使用冒泡排序制作排序程序。我想显示数组每次迭代的样子,所以如果输入是 [5,4,3,2,1] 我希望它在第一次迭代时显示 [4, 3, 2, 1, 5]

public static void main(String[] args) {
    Integer[] age = {5,4,3,2,1};
    //int[][] ef = new int[age.length][];
    ArrayList<Integer[]> fe = new ArrayList<Integer[]>();
    
    for(int i=0;i<2;i++)
    {
        for(int ii=1;ii<5;ii++)
        {
            //System.out.println(Arrays.toString(age));
            if(age[ii]<age[ii-1])
            {
                int x = age[ii];                    
                age[ii]=age[ii-1];
                age[ii-1]=x;
            }
        }
        
        System.out.println("result "+Arrays.toString(age)+"\n");
        fe.add(age);                            
    }
    //System.out.println(Arrays.toString(age));
    for(Integer[] f : fe)
    {
        System.out.print(Arrays.toString(f));
    }
}

我想要的输出是[4, 3, 2, 1, 5][3, 2, 1, 4, 5]

相反,我得到 [3, 2, 1, 4, 5][3, 2, 1, 4, 5]

您需要复制数组而不是多次添加相同的引用。

fe.add(age.clone());

您的算法就地修改 age - 您永远不会创建数组的副本。在 Java 中,任何非基本类型都不是按值存储而是按引用存储,因此 fe 包含对同一数组的多个引用。