Я бы разбил функциональность на меньшие логические проверки.Таким образом, вы можете проверять строку за строкой, столбец за столбцом и квадрат за квадратом.Например,
private boolean isValidRow(int[] row) {
// Code here to check for valid row (ie, check for duplicate numbers)
}
private boolean isValidColumn(int[] column) {
// Code here to check for valid column
}
private boolean isValidSquare(int[][] square) {
// Code here to check for valid square
}
Обратите внимание, что для строк и столбцов необходимо передавать только одномерный массив.Квадраты - это двумерный массив, так как вам нужно проверить область 3х3.Вы также можете рассматривать эти методы как static
, так как их функциональность не зависит от экземпляра платы Судоку.
Редактировать: предложение по проверке строки / столбца / квадрата состоит в использовании HashSet.Наборы могут иметь только 1 элемент с определенным значением, поэтому вы можете добавлять элементы и искать ошибку.Например:
HashSet<Integer> hs = new HashSet<Integer>();
for(int i = 0; i < 9; i++) {
if(!hs.add(integerArray[i])) // HashSet.add returns 'false' if the add fails
// (ie, if the element exists)
return false;
}
return true;