返回false;声明不“返回”

时间:2013-01-07 12:31:23

标签: java recursion return

我的返回虚假陈述无法按预期工作。我有一个名为“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;
}

3 个答案:

答案 0 :(得分:2)

你的函数在递归输入prosegui(...)时不能返回false,因为你没有检查你的递归​​调用的结果,它总是会返回true。

答案 1 :(得分: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

无论如何,那是我的理论!希望有所帮助。

答案 2 :(得分:1)

如果此代码在prosegui方法中,那么当它在此处调用时:

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

此调用返回的true / false从未使用过。