我目前正在编写一个程序,要求我输入与下面类似的输入。6 6 devolg redphk qchzjc poaafo vammnl qtfoxb前两个整数表示行和列,然后其余的表示要放入方法中的实际字符。我已经成功创建了一个创建并读取数组的方法。该程序是一个单词搜索难题求解器。它需要几种方法,但是我需要关注的是“ checkUp”方法和checkDown左右键...到目前为止,这是我针对该方法的代码。
public static boolean checkUp(char [][] puzzle, String word, int row, int col) {
System.out.println("Row: " + row + " Col: " + col + " Word: " + word.charAt(0) + " CurLet: " + puzzle[row][col] + " Word length: " + word.length());
if (row==0) {
return false;
} else if (word.length()==1) {
return true;
} else if (word.charAt(0) == puzzle[row][col]){
checkUp(puzzle,word.substring(1),row-1,col);
}
return false;
}
有些限制,我必须逐个读取Char中的数组及其所有内容,但无法将其转换为字符串。如果它们匹配,则在此特定示例中,我只需将行计数向下移动1即可向上移动。有谁对如何解决这个问题有更好的主意吗?在这一点上,我完全迷住了,实际上迷路了。到目前为止,我的朋友帮助我写了这篇文章,但我确实无法确切了解他到底想做什么。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
你的checkUp
方法设计用于在给定的字符矩阵(单词搜索谜题)中向上检查是否能找到指定单词。从你提供的代码来看,有几个问题需要解决和优化:
打印语句中的语法错误:在打印语句中,你需要使用逗号来分隔变量和字符串,而不是直接相连。例如,应改为 System.out.println("Row: " + row + " Col: " + col + ...)
。
递归逻辑不完整:当前的递归调用缺少返回值处理。即使在内部递归调用中找到了匹配,外部调用并不知道这一结果。你需要根据递归调用的结果返回true或false。
初始行判断可能导致遗漏正确答案:当row==0
时直接返回false可能过早结束搜索,因为单词的第一个字母可能不在第一行但后续字母可能在上方。这个判断应该放在循环外,并且在开始搜索前进行。
未处理列变化:由于是向上搜索,列数col
保持不变是正确的,但其他方向的方法(如checkDown
, checkLeft
, checkRight
)需要相应调整列或行的值。
修正后的checkUp
方法示例:
public static boolean checkUp(char [][] puzzle, String word, int row, int col) {
// 初始条件检查,如果已经超出了矩阵范围或者没有更多字符需要匹配,则返回false
if (row < 0 || word.isEmpty()) {
return false;
}
// 检查当前字符是否匹配
if (word.charAt(0) == puzzle[row][col]) {
// 如果是最后一个字符,说明整个单词匹配成功
if (word.length() == 1) {
return true;
}
// 继续向上一行搜索剩余的单词部分
return checkUp(puzzle, word.substring(1), row - 1, col);
} else {
// 当前字符不匹配,直接返回false
return false;
}
}
请确保在调用此方法之前,先检查输入的行和列是否在矩阵的有效范围内,以避免数组越界异常。对于其他方向的搜索方法(checkDown
, checkLeft
, checkRight
),你可以基于这个模板进行相应的调整。