2015-09-11 5 views
1

У меня есть массив 9x9 для решателя Sudoku, и я пытаюсь получить каждое поле 3x3 для добавления до 45 и проверить значение, чтобы обеспечить число являются правильными. Мой первый цикл for работает и добавляет к 45, но по какой-то причине следующий не делает, и я не могу понять, почему. Я подтвердил, что цифры в этом районе также должны быть добавлены к 45. Предложения?Я не могу получить числа в 2D-массиве, чтобы добавить для решателя Sudoku

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 
+0

Я предлагаю вам не использовать метод суммирования для проверки, потому что у вас есть 2 '5's' и № 6 и 7 и 2' 8-х ', то ваши 9 цифр будут добавлять до 45. – vish4071

ответ

3

Этот цикл не будет выполнен даже получить один раз:

for (int i = 0; i > 2 && i < 6; i++) 

Это потому, что i изначально равна нулю, что противоречит i > 2 && i < 6, так что тест не пройден, и мы сразу выходим из цикла.

Что вы имеете в виду:

for (int i = 3; i > 2 && i < 6; i++) 

Но если вы хотите, чтобы проверить каждую коробку 3х3, вы, вероятно, хотите перебрать все девять ящиков:

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

Вау, это довольно очевидная опечатка ... Я могу сказать, что уже поздно! Благодаря!!! –

+1

Мы все были там и сделали это. Кстати, я добавил код к моему ответу. –

+0

Как бы мне заставить это работать с добавлением столбцов и строк, а? –