Пытаюсь сделать программу, генерирующую рамдом судоку. Программа проверяет, не повторяется ли число в строке и в столбце,
verifyExistNumberInRow -> работает идеально
Но при вызове verifyExistNumberInColumn -> бесконечное l oop
Почему я не нашел решения, это проблема индекса? или проблема стоимости?.
Спасибо.
/**
* Generate a random Sudoku
*/
private static void generateRandomSudoku() {
Integer[][] array = new Integer[9][9];
Integer number;
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
do {
number = (int) (Math.random() * 9) + 1;
} while (verifyExistNumberInRow(number, array[i]) || verifyExistNumberInColumn(j, number, array));
array[i][j] = number;
}
}
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j] + " ");
}
System.out.print("\n");
}
}
/**
* Check if a number exist in array file.
*
* @param number
* @param array
* @return True if exist, other false.
*/
private static boolean verifyExistNumberInRow(Integer number, Integer[] array) {
return Stream.of(array)
.filter(Objects::nonNull)
.anyMatch(element -> element.equals(number));
}
/**
* Check if a number exist in array column
*
* @param position column number
* @param number number to find in column
* @param array
* @return true if exist, other false
*/
private static boolean verifyExistNumberInColumn(Integer position, Integer number, Integer[][] array) {
for (int i = 0; i < array.length; i++) {
if (array[i][position] != null) {
if (array[i][position].equals(number)) {
return true;
}
}
}
return false;
}