我无法在二维数组中获取数字以添加数独求解器

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