【问题标题】:ArrayList<int[]> displaying last array onlyArrayList<int[]> 仅显示最后一个数组
【发布时间】:2017-04-03 12:33:03
【问题描述】:

我正在尝试编写一个“Mastermind”人工智能程序,目前我正在尝试实现一个幼稚的人工智能,它可以搜索所有可能的 1296 种 4 种钉子和 6 种颜色的组合。 我编写了以下for 循环来打印所有组合:

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);

当我在结尾处使用System.out.println("combination" + Arrays.toString(combination.get(k))); 运行此代码时。这会正确显示组合,但是当我尝试执行以下操作时:

 for(int i=0; i< height; i++){
                int[] temp = combination.get(i);
                for(int j = 0; j < 4 ; j++){
                    state[i][j] = temp[j];
                }
                guess.addActionListener(this);

        }

它只显示最后一个元素 (4,4,4,4) 40 次,而不是我希望它是 (0,0,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,2), (0,0,1,3) 只有 10 这是height的大小

【问题讨论】:

标签: java arraylist combinations


【解决方案1】:

问题是您每次都使用相同的数组,导致对其中一个的更改会更改所有数组,因为它们实际上是相同的。只需在最里面的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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-15
    相关资源
    最近更新 更多