【发布时间】:2021-08-26 03:02:57
【问题描述】:
我不确定 boggle 是不是大多数人都熟悉的游戏,所以这里是一个简短的描述:
Boggle 是一款文字游戏,其目标是在随机字符的网格中找到英文单词。如果字符是左、下、上、右、对角线,则可以说它们是同一个单词的一部分。
我的任务是在给定二维随机字符数组的情况下递归查找输入的单词。我觉得我几乎找到了解决方案,但是我不断收到 arrayindexoutofbounds 异常,我不知道为什么。
根据控制台,ArrayIndexOutOfBoundsException 当前发生在第 4 个 else if 语句中
这是我目前在解决方案中所处的位置:
public static boolean letterIndex(String target, char[][] board, dictionary dictionary) {
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[0].length; j++) {
if (board[i][j] == target.charAt(0)) {
char[] temp = target.toCharArray();
return findword(target, i, j, board, 1, dictionary, temp);
}
}
}
return false;
}
public static boolean findword(String target, int i, int j, char[][] board, int k,
dictionary dictionary, char[] temp) {
if (k >= temp.length) {
return true;
} else if (i < board.length - 1 & board[i + 1][j] == target.charAt(k)) {
//temp[k] = board[i + 1][j];
return findword(target, i + 1, j, board, k + 1, dictionary, temp);
} else if (j < board[0].length - 1 & board[i][j + 1] == target.charAt(k)) {
//temp[k] = board[i][j + 1];
return findword(target, i, j + 1, board, k + 1, dictionary, temp);
} else if (i > 0 & board[i - 1][j] == target.charAt(k)) {
//temp[k] = board[i - 1][j];
return findword(target, i - 1, j, board, k + 1, dictionary, temp);
} else if (j > 0 & board[i][j - 1] == target.charAt(k)) {
//temp[k] = board[i][j - 1];
return findword(target, i, j - 1, board, k + 1, dictionary, temp);
} else if (i > 0 & j < board[0].length - 1 & board[i - 1][j + 1] == target.charAt(k)) {
//temp[k] = board[i - 1][j + 1];
return findword(target, i - 1, j + 1, board, k + 1, dictionary, temp);
} else if (i < board.length - 1 & j > 0 & board[i + 1][j - 1] == target.charAt(k)) {
//temp[k] = board[i + 1][j - 1];
return findword(target, i + 1, j - 1, board, k + 1, dictionary, temp);
} else if (i > 0 & j > 0 & board[i - 1][j - 1] == target.charAt(k)) {
//temp[k] = board[i - 1][j - 1];
return findword(target, i - 1, j - 1, board, k + 1, dictionary, temp);
} else if (i < board.length - 1 & j < board[0].length - 1 & board[i + 1][j + 1] == target.charAt(k)) {
//temp[k] = board[i + 1][j + 1];
return findword(target, i + 1, j + 1, board, k + 1, dictionary, temp);
}
return false;
}
letterIndex 方法搜索单词的首字母并找到它在棋盘上的位置。然后它将临时数组的第一个元素设置为这个字母并调用 findword 函数,该函数获取该字母在数组中的位置并检查下一个字母的每个方向。它会一直执行此操作,直到数组与目标字符串匹配或所有方向都返回 false。我不认为我所做的有什么问题,但我遇到了错误,所以显然我犯了一个错误。任何见解将不胜感激!
【问题讨论】:
-
如果您找到了答案并将其发布,然后接受您自己的答案,将问题移至下一个状态(搜索/观看中的绿色实心方块)。
标签: java string recursion multidimensional-array