2D数组被重置为原始值

时间:2016-06-08 12:47:16

标签: java arrays multidimensional-array methods

我正在开发一个数独游戏,我正在使用创建解决难题的方法然后“挖洞”来获得向用户显示的拼图。出于某种原因,每次进行循环时,testingPuzzle数组都会被重置为数字数组。确实,testingPuzzle数组最初应设置为数字数组,但每次进入循环时应该一次编辑一个点,并在几次迭代后在其中包含一堆零。这是循环本身:

    do{
        x = Math.abs(rand.nextInt() % 9);
        y = Math.abs(rand.nextInt() % 9);
        takeaway_num = testingPuzzle[x][y];
        testingPuzzle[x][y] = 0;
    } while (arraysEqual(solvePuzzle(testingPuzzle), numbers));

SolvePuzzle是一种方法,可以解决给定的谜题作为参数并返回解决的谜题。所以基本上arraysEqual(solvePuzzle(testingPuzzle), numbers)会检查testingPuzzle是否可以解决 我将testingPuzzle数组设置为等于do while循环之前的数字数组。它看起来像这样:

int[][] testingPuzzle = new int[9][9];
    for(int y = 0; y < 9; y++){
        for(int x = 0; x < 9; x++){
            testingPuzzle[x][y] = numbers[x][y];
        }
    }

您知道数字是在之前的方法中生成的sodoku答案。

我正在使用我自己的方法来测试数组是否相等,称为“arraysEqual,因为我认为.equals()最初是问题。这是我使用的方法:

private static boolean arraysEqual(int[][] a, int[][] b){
    for(int y = 0; y < 9; y++){
        for(int x = 0; x < 9; x++){
            if(a[x][y] != b[x][y]){
                return false;
            }
        }
    }
    return true;
}

我不确定为什么将testingPuzzle数组设置为与每个循环结束时的数字数组相同。我认为它可能与将实际数组与其副本传递给接收数组的方法有关,但我不确定它在java中是如何工作的。

0 个答案:

没有答案