ArrayIndexOutOfBoundsException - (36. Leetcode上的有效数独)

时间:2016-03-09 14:28:57

标签: java arrays indexoutofboundsexception

所有

我正在处理来自Leetcode的这个问题。

如果有人想查看问题,请点击以下链接:https://leetcode.com/problems/valid-sudoku/

我认为我几乎解决了这个问题,但是" java.lang.ArrayIndexOutOfBoundsException"我在我的代码中使用大写注释来标记出来,==> " if(brain [((int)board [x] [y]) - 1])"

我多次检查过,我认为索引应该在0~8之间完全正常,因为#int;对于(int i = 0,i< 9; i ++)"我找不到原因。

我想这一定是一个容易愚蠢的问题,但我有点花很多时间才能找到它。有人可以帮助我吗?

非常感谢任何帮助!

  public class Solution {
        public boolean isValidSudoku(char[][] board) {
            if (board.length > 9 || board[0].length > 9 || board == null) {
                return false;
            }

        boolean[] brain;
        // 9 digits are corresponding to 1 ~ 9 ==> 0 - 1, 1 - 2 ... 8 - 9
        // ex: brain[2] is checking for digit "3" , so using brain[3-1] to check "3"

        for (int x = 0; x < board.length; x++) {
            // Reset brain
            brain = new boolean[9];
            for (int y = 0; y < board[0].length; y++) {
                if (board[x][y] != '.') {


                    // THE NEXT LINE IS THE PROBLEM!!!


                    if (brain[((int) board[x][y]) - 1]) {

                        // my condition failed by using:
                        //                                                  brain[board[x][y] - 1]
                        // other's condition Partially passed by using
                        // (still failed for final submission:
                        //                                                  brain[(int) (board[x][y] - '1')]
                        // need to compare the difference


                        return false;
                    } else {
                        brain[((int) board[x][y]) - 1] = true;
                    }
                }
            }
        }


        for (int x = 0; x < board.length; x++) {
            // Reset brain
            brain = new boolean[9];
            for (int y = 0; y < board[0].length; y++) {
                if (board[x][y] != '.') {
                    if (brain[((int) board[y][x]) - 1]) {
                        return false;
                    } else {
                        brain[((int) board[y][x]) - 1] = true;
                    }
                }
            }
        }


        for (int block = 0; block < 9; block++) {
            // Reset brain
            brain = new boolean[9];
            for (int r = block / 3 * 3; r < block / 3 * 3 + 3; r++) {
                for (int c = block % 3 * 3; c < block % 3 * 3 + 3; c++) {
                    if (board[r][c] != '.') {
                        if (brain[((int) board[r][c]) - 1]) {
                            return false;
                        } else {
                            brain[((int) board[r][c]) - 1] = true;
                        }
                    }
                }
            }
        }
        return true;
    }
}

1 个答案:

答案 0 :(得分:0)

您正在尝试将char转换为int。尝试手动转换这些值,您会注意到0=489=57,我猜这应该是您的异常的原因。

您可能想要检查其中的值是否代表数字,并使用char方法获取Character#getNumericValue的数值。

if (Character.isDigit(board[x][y]) && 
    brain[Character.getNumericValue(board[x][y])) - 1]) { 
   ...
}