我正在开发一个数独游戏,我正在使用创建解决难题的方法然后“挖洞”来获得向用户显示的拼图。出于某种原因,每次进行循环时,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中是如何工作的。