2

私はスペル チェッカー プログラムを書いています。私が書かなければならない関数の 1 つは、スペル ミスのある単語の候補を見つける必要があります。したがって、再帰を使用して基数ツリーをたどり、すべての提案を見つけています。ただし、再帰が実行されると、使用するカウンターの1つが増加し続け、実際には増加するはずなのに、減少してから再び増加します。関数のコードは次のとおりです。

    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............: i

アプリ: 3

tmp.prefix: i

tmp.prefix.....................: c

アプリ: 4

tmp.prefix: c

tmp.prefix.....................: al

アプリ: 5

tmp.prefix: i

tmp.prefix.....................: se

アプリ: 6

tmp.prefix: せ

tmp.prefix.....................: d

アプリ: 7

tmp.prefix: せ

tmp.prefix.....................: s

アプリ: 7

tmp.prefix: i

tmp.prefix.....................: ze

アプリ: 8

tmp.prefix: ze

tmp.prefix.....................: d

アプリ: 9

tmp.prefix: ze

tmp.prefix.....................: s

アプリ: 4

tmp.prefix: t

tmp.prefix............: ure

アプリ: 0

tmp.prefix: ×

tmp.prefix.....................: e

アプリ: 1

tmp.prefix: e

tmp.prefix.....................: d

アプリ: 2

tmp.prefix: e

tmp.prefix.....................: s

アプリ: 2

tmp.prefix: ×

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

(これは、すべての単語候補の構築された文字列配列の最終結果です)

気候

気候変動

気候変動

気候

気候学

気候

クライマイズ

気候サイズ

気候化された

気候

4

2 に答える 2

1

appは であるためint、値で渡されるため、再帰呼び出しで変更を加えても、前の呼び出しでは変更されません。提案:それをクラスの静的またはフィールドに変更します(必要なコンテキストに応じて、おそらくフィールドになります)。これにより、すべてのメソッド呼び出しでアプリの同じインスタンスが得られます

于 2012-05-07T14:19:58.503 に答える
0

このメソッドを呼び出す前に、クラス レベルの変数を使用してゼロに初期化してください。必要に応じて、 static を使用するかどうかを選択できます。

于 2012-12-20T22:07:41.540 に答える