【问题标题】:Return false; statement doesn't "return"返回假;声明不会“返回”
【发布时间】:2012-12-21 04:27:18
【问题描述】:

我的 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;
}

【问题讨论】:

  • 您应该在问题中包含您的方法声明。
  • 以及失败的案例
  • return false 不会返回应有的值“false” => 它肯定会。唯一可能的原因:该行没有被执行。
  • 对我来说似乎很好。你确定else 分支被执行了吗?
  • 你试过调试了吗?

标签: java recursion return


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    第一次通过,this.parola.charAt(contChar+1)==matrice[i][j] 是真的。这意味着使用不同的输入 (prosegui(proseguiI,proseguiJ,i,j,contChar+1)) 再次调用 prosegui

    这次通过this.parola.charAt(contChar+1)==matrice[i][j] 是假的。这意味着将打印“FALSE”,并返回false

    现在我们回到prosegui(proseguiI,proseguiJ,i,j,contChar+1) 的电话。如果我们从这里向前一步,将打印“TRUE”并返回true

    这就是我的理论!希望对您有所帮助。

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • 当char不匹配时使用false,当contChar等于parola.length()时使用true,我错了吗?
      • 谢谢,我得到了错误,我只是添加了 if(prosegui(proseguiI,proseguiJ,i,j,contChar+1)==false){ return false; }
      • return prosegui(proseguiI,proseguiJ,i,j,contChar+1) 会不会更简单,做你想做的事?