2

我的 return false 声明没有按预期工作。我有一个名为“prosegui”的递归方法,它适用于我想要使用的大多数单词,但是对于其中一些单词,return 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

递归输入 prosegui(...) 时,您的函数不能返回 false,因为您不检查递归调用的结果,它将始终返回 true。

于 2013-01-07T12:39:32.360 回答
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 回答
1

如果这段代码在 prosegui 方法中,那么当它在这里调用自己时:

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

此调用返回的真/假从未使用过。

于 2013-01-07T12:38:16.280 回答