I'm trying to make a program that generates ramdom sudokus. The program verifies that a number is not repeated in the row and in the column,
verifyExistNumberInRow --> works perfect
But when call to verifyExistNumberInColumn --> infinite loop
Why, I dont found the solution, is an index problem? or a value problem?.
Thank you.
/**
* 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;
}