我有一个从字符网格中的单词数组中搜索单词的方法。它搜索从左到右、从右到左、从上到下、从下到上、从左垂直向上、从右垂直向上、从左垂直向下和从右垂直向下。
当我注释掉除一个以外的所有方向时,例如,我试图找到一个对角方向的单词,它有效,但当我试图运行它时,所有方向都没有注释掉,只有几个单词返回来,我试图搜索。
SCALA
JAVA
ALGOS
ALGORITHM
SLUG
SLUR
GOES
TURTLE
当我运行我的程序时,它找到了SCALA和JAVA,但当它试图寻找algos时,它给了我一个索引越界异常。然而,当我注释掉所有的方向,并搜索我知道阿尔戈斯所在的方向时,它不会给我任何问题。
我的代码有什么问题,它做到了这一点,我如何修复它?谢谢你。
public static String findWord(char[][]board, String word) {
int counter = 0;
for (int row = 0; row < board.length; row++) {
for (int col = 0; col < board[row].length; col++) {
// search to the right
if (col + (word.length()-1) <= board[row].length) {
boolean foundWord = true;
for (int letters = 0; letters < word.length(); letters++) {
if (word.charAt(letters) != board[row][col+letters]) {
foundWord = false;
break;
}
}
if(foundWord) {
return word + " Found at: " + Arrays.toString(new int[] {row,col});
}
} // end search to the right
// search to the left
if (col - (word.length()-1) >= 0) {
boolean foundWord = true;
for (int letters = 0; letters < word.length(); letters++) {
if (word.charAt(letters) != board[row][col-letters]) {
foundWord = false;
break;
}
}
if(foundWord) {
return word + " Found at: " + Arrays.toString(new int[] {row,col});
}
} // end search to the left
// search down
if (row + (word.length()-1) <= board[row].length) {
boolean foundWord = true;
for (int letters = 0; letters < word.length(); letters++) {
if (word.charAt(letters) != board[row+letters][col]) {
foundWord = false;
break;
}
}
if(foundWord) {
return word + " Found at: " + Arrays.toString(new int[] {row,col});
}
} // end search down
// search up
if (row - (word.length()-1) >= 0) {
boolean foundWord = true;
for (int letters = 0; letters < word.length(); letters++) {
if (word.charAt(letters) != board[row-letters][col]) {
foundWord = false;
break;
}
}
if (foundWord) {
return word + " Found at: " + Arrays.toString(new int[] {row,col});
}
} // end search up
// search diagonal up to right
if((row - (word.length()-1) <= 0) && (col + (word.length()-1) <= board[row].length)) {
boolean foundWord = true;
for (int letters = 0; letters < word.length(); letters++) {
if (word.charAt(letters) != board[row-letters][col+letters]) {
foundWord = false;
break;
}
}
if(foundWord) {
return word + " Found at: " + Arrays.toString(new int[] {row,col});
}
}
// end search diagonal up to right
// search diagonal up to left
if((row - (word.length()-1) >= 0) && (col - (word.length()-1) >= 0)) {
boolean foundWord = true;
for (int letters = 0; letters < word.length(); letters++) {
if (word.charAt(letters) != board[row-letters][col-letters]) {
foundWord = false;
break;
}
}
if(foundWord) {
return word + " Found at: " + Arrays.toString(new int[] {row,col});
}
} // end search diagonal up to left
// search diagonal down to right
if((row + (word.length()-1) <= board[row].length) && (col + (word.length()-1) <= board[row].length)) {
boolean foundWord = true;
for (int letters = 0; letters < word.length(); letters++) {
if (word.charAt(letters) != board[row+letters][col+letters]) {
foundWord = false;
break;
}
}
if(foundWord) {
return word + " Found at: " + Arrays.toString(new int[] {row,col});
}
} // end search diagonal down to right
// search diagonal down to left
if((row + (word.length()-1) <= board[row].length) && (col - (word.length()-1) >=0)) {
boolean foundWord = true;
for (int letters = 0; letters < word.length(); letters++) {
if (word.charAt(letters) != board[row+letters][col-letters]) {
foundWord = false;
break;
}
}
if(foundWord) {
return word + " Found at: " + Arrays.toString(new int[] {row,col});
}
}
// end search diagonal down to left
}
}
return word + " not found";
} // end method findWord
只盯着它看一下,试着查一下://搜索右如果(col+(word.length()-1)<=board[row].length){
对此://如果(col+(word.length()-1)
编辑:
//如果((row-(word.length()-1)<=0)&&(col+(word.length()-1)<=board[rought].length){
到这里://如果((row-(word.length()-1)>=0)&&(col+(word.length()-1)
以下内容:
//如果((row+(word.length()-1)<=board[row].length)&&(col+(word.length()-1)<=board[row].length)
则向右对角线搜索
对此:
//如果((row+(word.length()-1)
以下内容:
//如果((row+(word.length()-1)<=board[row].length)&&(col-(word.length()-1)>=0)){
对此:
//如果((row+(word.length()-1)
最后编辑:只是想解释一下这里发生了什么。你的检查范围只是一些简单的疏忽。我总是犯这些小错误,它们是最难发现的。但是,要注意你的界限。检查
index<=board[row].length
是否允许index成为数组的长度,而数组中根本不是索引(不包括关联数组!)。您还在一个点执行了if(index<=0&&...)
,这将消除除第一行/列以外所有点的搜索的整个方向。
问题内容: 我有一个来自客户的错误,当我查看日志时,我们跟踪异常,某些堆栈跟踪没有行号: 请注意:我已将包名称替换为“ xx”),并且所有类和方法均在我们的应用程序中定义: 完整的堆栈跟踪如下: 我对为什么会发生这样的事情很感兴趣,我的客户是否有可能对现有代码(自定义)进行某些处理? 问题答案: 不显示行号的代码是在没有调试信息的情况下编译的。
例如,给定和board= 并遇到以下实现: 在中,为特定单词设置trie后,它执行。在中,它检查。 但是,为什么是直到找到单词中的最后一个字符,那么就不再是了呢? 不依赖于任何索引,它与对象本身直接相关,因此应该可以在任何时候访问,但我只是不明白为什么直到找到该单词的最后一个字符。 谢谢。
问题内容: 我正在发送此请求 我得到正确的结果 但是当我想按单词部分搜索时,例如 我没有得到任何结果: 我究竟做错了什么? 问题答案: 这是因为您的字段可能已由标准分析器(默认设置)进行了分析,并且标题已被标记为三个标记,并且。 为了搜索单词的任何子串,您需要创建一个自定义分析器,该分析器利用ngram令牌过滤器来索引每个令牌的所有子串。 您可以这样创建索引: 然后,您可以重新索引数据。这将使标题
问题内容: 我需要在HTML源代码中找到一个单词。我还需要计算发生的次数。我正在尝试使用正则表达式。但它说找到0个匹配项。 我正在使用正则表达式,因为我认为这是最好的方法。如果有更好的方法,请告诉我。 我需要在HTML源代码中找到单词“ hsw.ads”的出现。 我已采取以下步骤。 但是计数是0; 请让我知道您的解决方案。 谢谢。帮助寻求者 问题答案: 您应该尝试一下。 在字符串中传递要搜索的单词
问题内容: 请参阅 Java Enum定义 和 [为什么在Java中将枚举声明为Enum <E扩展Enum <E ](http://codingdict.com/questions/131394) 进行一般性讨论。在这里,我想了解如果将Enum类定义为以下内容,则会被完全破坏(不再是类型安全的,或者需要其他强制转换等) 我正在使用以下代码测试我的想法: 有了它,我无法在这种确切的情况下找到任何好处
然后创建用于测试的对象 在menulist[][]中我不能获得前两行的价格,但我仍然可以获得最后一行 输出为 我只想知道为什么?我该怎么解决这个问题?