返回假;声明不会“返回”

Posted

技术标签:

【中文标题】返回假;声明不会“返回”【英文标题】: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 分支被执行了吗? 你试过调试了吗? 【参考方案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) 会不会更简单,做你想做的事?

以上是关于返回假;声明不会“返回”的主要内容,如果未能解决你的问题,请参考以下文章

AWK ( 二 )

如何在 Angular JS 中声明一个不是服务但不会污染全局范围的对象?

TypeScript:如何声明记录或记录数组的类型?

一道正确率只有15%的命名返回值和闭包的问题

特性(Attributes)

尽管声明明确,但 Swift 中的 String 值不会改变 [重复]