我无法在二维数组中获取数字以添加数独求解器
I can't get numbers in a 2D array to add for a Sudoku solver
我有一个用于数独求解器的 9x9 数组,我正在尝试将每个 3x3 框添加到 45 并检查值以确保数字正确。我的第一个 for
循环有效并加到 45,但出于某种原因,下一个循环无效,我不明白为什么。我已经确认该地区的数字也应该增加到 45。建议?
int sum = 0;
int sum2 = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
sum += grid[i][j];}}
for (int i = 0; i > 2 && i < 6; i++) {
for (int j = 0; j < 3; j++) {
sum2 += grid[i][j];}}
System.out.println(sum); //prints 45 currently
System.out.println(sum2); //prints 0 currently
这个循环一次都不会执行:
for (int i = 0; i > 2 && i < 6; i++)
那是因为i
初始为零,与i > 2 && i < 6
矛盾,所以测试失败,我们立即退出循环。
你的意思是:
for (int i = 3; i > 2 && i < 6; i++)
但是如果您想检查每个 3x3 的框,您可能需要遍历所有九个框:
int boxSums[][] = new int[3][3];
for (int iStart = 0; iStart < 9; iStart += 3) {
for (int jStart = 0; jStart < 9; jStart += 3) {
int sum = 0;
for (int i = iStart; i < iStart + 3; i++) {
for (int j = jStart; j < jStart + 3; j++) {
sum += grid[i][j];
}
}
boxSums[iStart / 3][jStart / 3] = sum;
}
}
更好的是,您可以遍历网格元素并计算每个元素的框索引。这使您可以同时添加行和列。此外,您可以使用两个嵌套循环而不是四个嵌套循环:
int boxSums[][] = new int[3][3],
rowSums[] = new int[9],
columnSums[] = new int[9];
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
int value = grid[i][j];
boxSums[i / 3][j / 3] += value;
rowSums[i] += value;
columnSums[j] += value;
}
}
我有一个用于数独求解器的 9x9 数组,我正在尝试将每个 3x3 框添加到 45 并检查值以确保数字正确。我的第一个 for
循环有效并加到 45,但出于某种原因,下一个循环无效,我不明白为什么。我已经确认该地区的数字也应该增加到 45。建议?
int sum = 0;
int sum2 = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
sum += grid[i][j];}}
for (int i = 0; i > 2 && i < 6; i++) {
for (int j = 0; j < 3; j++) {
sum2 += grid[i][j];}}
System.out.println(sum); //prints 45 currently
System.out.println(sum2); //prints 0 currently
这个循环一次都不会执行:
for (int i = 0; i > 2 && i < 6; i++)
那是因为i
初始为零,与i > 2 && i < 6
矛盾,所以测试失败,我们立即退出循环。
你的意思是:
for (int i = 3; i > 2 && i < 6; i++)
但是如果您想检查每个 3x3 的框,您可能需要遍历所有九个框:
int boxSums[][] = new int[3][3];
for (int iStart = 0; iStart < 9; iStart += 3) {
for (int jStart = 0; jStart < 9; jStart += 3) {
int sum = 0;
for (int i = iStart; i < iStart + 3; i++) {
for (int j = jStart; j < jStart + 3; j++) {
sum += grid[i][j];
}
}
boxSums[iStart / 3][jStart / 3] = sum;
}
}
更好的是,您可以遍历网格元素并计算每个元素的框索引。这使您可以同时添加行和列。此外,您可以使用两个嵌套循环而不是四个嵌套循环:
int boxSums[][] = new int[3][3],
rowSums[] = new int[9],
columnSums[] = new int[9];
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
int value = grid[i][j];
boxSums[i / 3][j / 3] += value;
rowSums[i] += value;
columnSums[j] += value;
}
}