2

我正在编写一个拼写检查程序,我必须编写的功能之一必须为拼写错误的单词找到建议。因此,我使用递归来遍历我的基数树并找到所有建议。但是,当我的递归执行时,我使用的计数器之一不断增加,然后减少,然后再次增加,而实际上它应该只是增加。这是该函数的代码。

    public void findSuggest(Edge tmp, String suffix, int app)
{
    int used = 0;

    if(tmp.tNode.children > 10)
    {
        used = 10;
    }
    else
    {
        used = tmp.tNode.children;
    }
    for(int j = 0; j < used; j++){
        if(app <= 9)
        {
            if((!"#".equals(tmp.prefix))&&(!"#".equals(tmp.tNode.edges[j].prefix))){
                suggest[app].append(tmp.prefix);                               
                suggest[app].append(tmp.tNode.edges[j].prefix);

                System.out.println("tmp.prefix: " + tmp.prefix);
                System.out.println("tmp.prefix............: " + tmp.tNode.edges[j].prefix);
                app++;     
                if(tmp.tNode.edges[j].tNode != null)
                {
                    suggest[app].append(tmp.prefix); 
                    System.out.println("App: " + app);
                    findSuggest(tmp.tNode.edges[j], suffix, app++);
                }
            }
        }
    }

}

这是我得到的输出: App 是计数器, tmp.prefix 是父节点的前缀, tmp.prefix....... 是子节点的前缀。

应用程序:0

tmp.prefix: t

tmp.prefix…………:e

应用:1

tmp.prefix: e

tmp.prefix…………:s

应用:2

tmp.prefix: t

tmp.prefix............:我

应用:3

tmp.prefix: 我

tmp.prefix…………:c

应用:4

tmp.prefix: c

tmp.prefix............:人

应用:5

tmp.prefix: 我

tmp.prefix…………:se

应用:6

tmp.prefix: se

tmp.prefix…………:d

应用:7

tmp.prefix: se

tmp.prefix…………:s

应用:7

tmp.prefix: 我

tmp.prefix…………:ze

应用:8

tmp.prefix: 泽

tmp.prefix…………:d

应用:9

tmp.prefix: 泽

tmp.prefix…………:s

应用:4

tmp.prefix: t

tmp.prefix............:是的

应用程序:0

tmp.prefix: x

tmp.prefix…………:e

应用:1

tmp.prefix: e

tmp.prefix…………:d

应用:2

tmp.prefix: e

tmp.prefix…………:s

应用:2

tmp.prefix: x

tmp.prefix............: ing

(这是所有单词建议的构建字符串数组的最终结果)

气候

气候限制

气候变化

气候

气候学

气候

气候

气候大小

气候

气候

4

2 回答 2

1

Since app is an int, its passed by value, so any changes you make on it on the recursive calls won't change it on the previous call. Suggestion: alter it to a static or to a field of your class (depending of the context you'll need it, probably will be a fild), this way you'll have the same instance of the app in all of the method calls

于 2012-05-07T14:19:58.503 回答
0

在调用此方法之前,使用类级别变量并将其初始化为零。根据您的需要,您可能会或可能不会选择使用静态。

于 2012-12-20T22:07:41.540 回答