当前位置: 首页 > 知识库问答 >
问题:

在Java中查找2D字符数组中的单词。如果某些部分没有被注释掉,为什么我会有搜索问题?

巫经义
2023-03-14

我有一个从字符网格中的单词数组中搜索单词的方法。它搜索从左到右、从右到左、从上到下、从下到上、从左垂直向上、从右垂直向上、从左垂直向下和从右垂直向下。

当我注释掉除一个以外的所有方向时,例如,我试图找到一个对角方向的单词,它有效,但当我试图运行它时,所有方向都没有注释掉,只有几个单词返回来,我试图搜索。

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

共有1个答案

冯翔
2023-03-14

只盯着它看一下,试着查一下://搜索右如果(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) =0)){

最后编辑:只是想解释一下这里发生了什么。你的检查范围只是一些简单的疏忽。我总是犯这些小错误,它们是最难发现的。但是,要注意你的界限。检查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[][]中我不能获得前两行的价格,但我仍然可以获得最后一行 输出为 我只想知道为什么?我该怎么解决这个问题?