Java ArrayList<;int[]>;仅显示最后一个数组

Java ArrayList<;int[]>;仅显示最后一个数组,java,arraylist,combinations,Java,Arraylist,Combinations,我正在尝试编写一个“智囊团”人工智能程序,目前我正在尝试实现一个天真的人工智能,它搜索所有可能的1296个组合,包括4个钉子和6种颜色。 我为循环编写了以下,以打印出所有组合: int compguess[] = new int[4]; int a, b, c, d; ArrayList<int[]> combination = new ArrayList<int[]>(); for (int z = 0; z < 6; z++) {

我正在尝试编写一个“智囊团”人工智能程序,目前我正在尝试实现一个天真的人工智能,它搜索所有可能的1296个组合,包括4个钉子和6种颜色。 我为循环编写了以下
,以打印出所有组合:

int compguess[] = new int[4];
int a, b, c, d;
ArrayList<int[]> combination = new ArrayList<int[]>();
for (int z = 0; z < 6; z++) {
                for (int x = 0; x < 6; x++) {
                    for (int i = 0; i < 6; i++) {
                        for (int k = 0; k < 6; k++) {
                            a = z;
                            b = x;
                            c = i;
                            d = k;
                            compguess[0] = a;
                            compguess[1] = b;
                            compguess[2] = c;
                            compguess[3] = d;
                            combination.add(compguess);

它只显示最后一个元素(4,4,4,4)40次,而我希望它是(0,0,0,0,0,1),(0,0,0,2),(0,0,0,3),(0,0,0,4),(0,0,0,5),(0,0,1,0),(0,0,1,1),(0,0,1,1),(0,0,1,3)只有10次,这是
高度的大小,对其中一个进行更改会改变所有内容,因为它们实际上是相同的。只需在最里面的
for
循环中重新初始化数组:

for (int z = 0; z < 6; z++) {
    for (int x = 0; x < 6; x++) {
        for (int i = 0; i < 6; i++) {
            for (int k = 0; k < 6; k++) {
                compguess = new int[4];
                // rest of your code
for(intz=0;z<6;z++){
对于(int x=0;x<6;x++){
对于(int i=0;i<6;i++){
对于(int k=0;k<6;k++){
compguess=新整数[4];
//代码的其余部分

问题在于,您每次都在使用相同的数组,导致对其中一个数组的更改会改变所有数组,因为它们实际上是相同的。只需在最内层的
for
循环中重新初始化数组:

for (int z = 0; z < 6; z++) {
    for (int x = 0; x < 6; x++) {
        for (int i = 0; i < 6; i++) {
            for (int k = 0; k < 6; k++) {
                compguess = new int[4];
                // rest of your code
for(intz=0;z<6;z++){
对于(int x=0;x<6;x++){
对于(int i=0;i<6;i++){
对于(int k=0;k<6;k++){
compguess=新整数[4];
//代码的其余部分

composition.add(compguess);
不会复制
compguess
。您正在将同一数组反复放入列表中。请尝试
composition.add(新的int[]{z,x,i,k});
改为add;
不复制
compguess
。您正在将同一数组反复放入列表中。请尝试
组合。添加(新int[]{z,x,i,k});
而不是。它的工作方式我也希望它知道。非常感谢!可能是重复的