Реализация поиска в двумерных словах: исключение индекса из диапазона (Java) - PullRequest
0 голосов
/ 24 июня 2018

Я пытаюсь найти решение DFS Java для поиска 2D-слов - я проверяю массив двумерных символов, чтобы увидеть, существует ли слово (разрешено ли перемещаться вертикально и горизонтально).Когда я выполняю проверку границ для моей рекурсивной функции findLetters, я получаю исключение «индекс вне границ».Я полагаю, что правильно установил проверку границ, поэтому не уверен, почему она выходит за пределы диапазона.

Любые идеи приветствуются!

Контрольный пример:

char [][] board =
{
  {'A','B','C','E'},
  {'S','F','C','S'},
  {'A','D','E','E'}
};

Дано слово = "ABCCED", вернуть true.Дано слово = "СМОТРЕТЬ", вернуть true.Заданное слово = "ABCB", вернуть false.

Сообщение об ошибке / трассировка стека:

Сообщение об ошибке во время выполнения: Исключение в потоке "main"java.lang.StringIndexOutOfBoundsException: индекс строки вне диапазона: 1 в java.lang.String.charAt (String.java:615) в Solution.findLetters (Solution.java:20) в Solution.exist (Solution.java:10)в DriverSolution . помощник ( Драйвер .java: 8) в Драйвер .main ( Драйвер .java:54) Последний выполненный ввод: [["a"]] "a"

Решение:

public boolean exist(char[][] board, String word) {

int row = board.length, column = board[0].length;

for (int i = 0; i < row; i++) {
    for (int j = 0; j < column; j++) {

        if (board[i][j] == word.charAt(0)) {
            if (findLetters(board, i, j, word, 1)) return true;
        }

    }
}     
return false;
}

public boolean findLetters(char[][] board, int i, int j, String word, int index) {

if (i < 0 || i >= board.length || j < 0 || j >= board[0].length || word.charAt(index) != board[i][j]) {
    return false;
}

    if (index == word.length()) return true;

    else if (
    findLetters(board, i + 1, j, word, index++) ||
    findLetters(board, i - 1, j, word, index++) ||
    findLetters(board, i, j + 1, word, index++) ||
    findLetters(board, i, j - 1, word, index++)
    )   {
        return true;
    }

return false;
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...