ArrayList 在 java 中出现问题。 x+y+z+w = 13 的正整数解

ArrayList giving problems in java. positive integers solution to x+y+z+w = 13

所以我正在创建一种方法,它基本上给出了问题 x+y+z+w = 13 的所有可能的正整数解决方案。实际上,我设计了一个程序,可以使用任何数字获得所有可能的正整数解决方案任意数量的变量。我已经设法使用这种方法获得了解决方案:

public class Choose {

    public static ArrayList<int[]> values;

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] loops = new int[3];
        int q = 0;
        values = new ArrayList<int[]>();
        int[] array = new int[4];
        System.out.println(choose(12,3));
        NestedLoops(3,10,0,loops,13,array, 0);

        for(int i = 0; i < values.size(); i++){
            printArray(values.get(i));
        }

    }

    public static void NestedLoops(int n, int k, int j, 
                                       int[] loops, int q, int[] array, int g){
        if(j==n){
            for(int i = 0; i< n; i++){
                q-=loops[i];
            }
            if(q>0){
                for(int i = 0; i < n; i++){
                    array[i] = loops[i];
                }
                array[n] = q;
                values.add(array);
            }
            return;
        }
        for(int count = 1; count <= k; count++){
            loops[j] = count;
            NestedLoops(n,k,j+1,loops, 13, array, g);
        }
    }
}

我的问题是,当我打印 ArrayList 时,我得到的只是最后一次重复的值。当我尝试只打印出值而不是将它们存储在 ArrayList 中时,它工作得很好。这让我认为问题出在 values.add(array);线,但我不知道如何解决它或我做错了什么。感谢您提供的任何帮助。

尝试使用:

values.add(array.clone());

同一数组的每次添加都指向该数组对象。当您不断更改同一个对象时,最终状态就是所有存储元素所显示的状态。打印工作正常,因为它只是在特定时刻转储阵列的状态。