【问题标题】:Word search in a puzzle拼图中的单词搜索
【发布时间】:2011-10-23 02:43:55
【问题描述】:

新手在这里,我编写了一个代码来搜索谜题中的单词,但是在我运行程序后,单词搜索似乎没有返回任何内容。我将字典存储在二叉树中。我需要对照我的树中的每个字符组合检查。你能帮忙吗?谢谢……

这是解决方法

public String solve() 
{
    int row = puzzle.length;
    int coloumns = puzzle[0].length;
    this.foundWords = new ArrayList<String>();
    if (this.dictionary == null)
        return null;
    for (int i = 0; i < this.puzzle[0].length; ++i)
    {
        for (int j = 0; j < this.puzzle.length; ++j)
        {
            if (this.getWord(i, j, 0, 1) == null)
                continue;
            if(this.inDictionary(this.getWord(i,j,0,1)))
                this.foundWords.add(getWord(i,j,0,1).concat("\n" + this.mapDirection(0)));
            for(int d = 0; d<8; ++d)
            {
                int n = 2;
                String word = this.getWord(i,j,d,n);
                while(word !=null)
                {
                    if(this.inDictionary(word))
                        this.foundWords.add(word.concat("\n" + this.mapDirection(d)));
                    word = this.getWord(i,j,d,n);
                    n++;
                }
            }               

        }
    }
    String temp = "";
    for(int i= 0; i < foundWords.size(); i++)
    {
        temp = temp.concat(foundWords.get(i));
    }
    return temp;
} 

这样就明白了..

public String getWord(int row, int column, int d, int length)
{ 
    if (length < 1)
        return null;
    d %= 8;

    StringBuilder rBuild = new StringBuilder();
    rBuild.append(this.puzzle[row][column]);
    length--;
    while (length >= 0)
    {
        if ((d == 3) || (d == 4) || (d == 5))
            column--;
        if ((d == 1) || (d == 0) || (d == 7))
            column++;

        if ((d == 1) || (d == 2) || (d == 3))
            row--;
        if ((d == 5) || (d == 6) || (d == 7))
            row++;

        if ((row < 0) || (row >= this.puzzle.length)
        || (column < 0) || (column >= this.puzzle[0].length))
            return null;

            rBuild.append(this.puzzle[row][column]);
            length--;
    }

    return rBuild.toString();
}

方向..

public String mapDirection(int direction)
{
    direction %=8;
    switch(direction)
    {
        case 0: return " right";
        case 1: return " up and right";
        case 2: return " up";
        case 3: return " up and left";
        case 4: return  " left";
        case 5: return " down and left";
        case 6: return " down and left";
        case 7: return " down and right";
    }
    return null;
}

【问题讨论】:

  • 您在单步执行代码时看到了什么?
  • 当我运行搜索时,什么也没有发生,没有异常,没有字符串显示,什么也没有。如果我编辑 temp 并将其更改为字符串,我会看到该字符串,所以这告诉我 foundWords 似乎是空的。
  • 开发环境不允许你逐行单步执行你的代码吗?如果没有,则添加一堆日志记录功能,以查看它的去向和正在做什么。

标签: java


【解决方案1】:

您可能会查看Jumble 中采用的方法,它实现了here 中显示的第一个算法。它比排列(第二种)方法更快且可扩展性更好。

【讨论】:

    【解决方案2】:

    我认为在getWord,这一行:

    while (length >= 0)
    

    应该是

    while (length > 0)
    

    【讨论】:

    • 真的吗?更改应该减少循环的次数。哪一行触发了OOB异常?
    • @user938295 - 出了点问题。那行没有数组访问,怎么会有OOB异常呢?
    猜你喜欢
    • 2021-10-05
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    相关资源
    最近更新 更多