在java中给出问题的arraylist正整数解x+y+z+w=13

kr98yfug  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(367)

所以我创建了一个方法,基本上给出了问题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)上;但我不知道该怎么修,也不知道我做错了什么。谢谢你的帮助。

jrcvhitl

jrcvhitl1#

尝试使用:

values.add(array.clone());

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

相关问题