所以我创建了一个方法,基本上给出了问题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)上;但我不知道该怎么修,也不知道我做错了什么。谢谢你的帮助。
1条答案
按热度按时间jrcvhitl1#
尝试使用:
同一数组的每次加法都指向该数组对象。当您不断更改同一个对象时,最终状态是显示所有存储元素的状态。打印的工作原理是,它只是在特定时刻转储数组的状态。