-1

My sudoku solver replaces "-" with zeros, then solves the puzzle. It works for most puzzles that I've tried, but throws an ArrayIndexOutOfBoundsException for puzzles with a full row of dashes. I've tried tweeking different things to get it to work, but I'm a little lost.

This is what the puzzle looks like.

public static int[][] theArray = new int [9][9];
public static int SIZE = 9;

private static boolean isCompletePuzzle() {
    // checks for 0 in rows/cols
    for (int i = 0; i <= SIZE; i++) {
        for (int j = 0; j <= SIZE; j++) {
            if (theArray[i][j] != 0) {
                return true;
            }
        }
    }
    return false;
}

private static boolean isValidPuzzle(int row, int col, int number) {
    // checks rows
    for (int i = 0; i < SIZE; i++) {
        if (theArray[row][i] == number) {
            return true;
        }
    }

    // checks columns
    for (int i = 0; i < SIZE; i++) {
        if (theArray[i][col] == number) {
            return true;
        }
    }

    // checks 3x3
    int r = row - row % 3;
    int c = col - col % 3;

    for (int i = r; i < r + 3; i++)
        for (int j = c; j < c + 3; j++)
            if (theArray[i][j] == number)
                return true;

    return false;
}

private static boolean isSolvedPuzzle(int row, int col, int number) {

    if (isValidPuzzle(row, col, number) == true && isCompletePuzzle() == true) {
        return true;
    }
    return false;
}

public static boolean solvePuzzle() {
    for (int row = 0; row < SIZE; row++) {
        for (int col = 0; col < SIZE; col++) {

            if (theArray[row][col] == 0) {

                for (int number = 1; number <= SIZE; number++) {
                    if (!isSolvedPuzzle(row, col, number)) {

                        theArray[row][col] = number;
                        if (solvePuzzle()) { 
                            return true;
                        } 

                        else {
                         theArray[row][col] = 0;
                        }
                    }
                }
                return false; 
            }
        }
    }
    return true; 
}
mij
  • 3
  • 1

1 Answers1

0

in ur isCompletePuzzle() function ur loop conditions i <= SIZE and j <= SIZE cause ArrayIndexOutOfBoundsException

when i is 9 the if (theArray[i][j] != 0) throw ArrayIndexOutOfBoundsException

hossein rasekhi
  • 209
  • 1
  • 13