返回假;声明不会“返回”
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)
会不会更简单,做你想做的事?以上是关于返回假;声明不会“返回”的主要内容,如果未能解决你的问题,请参考以下文章