2

私のreturnfalseステートメントは期待どおりに機能しません。「prosegui」と呼ばれる再帰メソッドがあります。これは、使用したいほとんどの単語で機能しますが、一部の単語では、falseを返すと、「false」の値が返されませんが、続行して返されます。本当。

if (contChar < this.parola.length() - 1) {
    if (this.parola.charAt(contChar+1)==matrice[i][j])
    {
        prosegui(proseguiI,proseguiJ,i,j,contChar+1);
    } 
    else 
    {
        System.out.println("FALSE");
        return false;
    }
}

System.out.println("TRUE");
return true;

私は本当にそれを整理する方法がわかりません。

編集:

プログラムは「FALSE」と「TRUE」の両方を出力します

編集:

public boolean prosegui(int i, int j, int proseguiI, int proseguiJ, int contChar)
{
    if (contChar < this.parola.length() - 1)
    {
        int direzioneI=proseguiI-i;
        int direzioneJ=proseguiJ-j; 
        i=proseguiI+direzioneI;
        j=proseguiJ+direzioneJ;

        int cont;
        StringTokenizer st = new StringTokenizer(this.results);

        cont=0;

        char[][] matrice = new char[this.lung][this.lung];

        while (st.hasMoreTokens())
        {
             matrice[cont]=st.nextElement().toString().toCharArray();
             cont++;
        }

        if(this.parola.charAt(contChar+1)==matrice[i][j]){

        prosegui(proseguiI,proseguiJ,i,j,contChar+1);
    }
    else 
    {
        System.out.println("FALSE");
        return false;
    }
}

System.out.println("TRUE");
return true;
}
4

3 に答える 3

2

初めて、this.parola.charAt(contChar+1)==matrice[i][j]本当です。これはprosegui、別の入力(prosegui(proseguiI,proseguiJ,i,j,contChar+1))で再度呼び出されることを意味します。

今回this.parola.charAt(contChar+1)==matrice[i][j]は誤りです。これは、「FALSE」が出力され、false返されることを意味します。

これで、への呼び出しに戻りますprosegui(proseguiI,proseguiJ,i,j,contChar+1)。ここから先に進むと、「TRUE」が印刷されてtrue返されます。

それはとにかく私の理論です!お役に立てば幸いです。

于 2013-01-07T12:41:36.513 に答える
2

prosegui(...)を再帰的に入力するときに、関数がfalseを返すことはできません。再帰呼び出しの結果をチェックしないため、常にtrueが返されます。

于 2013-01-07T12:39:32.360 に答える
1

このコードがproseguiメソッドにある場合、ここでそれ自体を呼び出すと、次のようになります。

prosegui(proseguiI,proseguiJ,i,j,contChar+1);

この呼び出しによって返されるtrue/falseは使用されません。

于 2013-01-07T12:38:16.280 に答える