[英]why the return statement is not executing?
我正在尝试在二叉树中实现find方法。 当该方法需要返回一个值,但即使在同一分号中要执行的其他行中,它似乎也未执行该语句,就会出现问题。
public String find(Node currentNode, String value)
{
if(isEmpty())
{
return null;
}
else
{
if(currentNode.getData().compareToIgnoreCase(value) == 0)
{
System.out.println("current -> "+currentNode.getData()); //showing
return currentNode.getData(); //not executing
}
if(value.compareToIgnoreCase(currentNode.getData()) < 0)
{
find(currentNode.getLeft(), value);
}
else if(value.compareToIgnoreCase(currentNode.getData()) > 0)
{
find(currentNode.getRight(), value);
}
}
return null; //always executing
}
我期望“ a”,但返回null。
当您执行该行时
find(currentNode.getLeft(), value);
您的语句return currentNode.getData();
正在执行,但是您忽略了递归调用返回的内容。 (类似于getRight()
语句。)然后,if / else语句完成,并执行底部的return null
。 这就是为什么您总是得到null
。
返回递归调用返回的任何内容,以便返回的值正确传播回原始调用,例如:
return find(currentNode.getLeft(), value);
您必须使用返回递归调用的数据,现在您正在忽略它。 同样,无论如何,您总是返回null
,这是程序的固定版本:
public String find(TreeNode currentNode, String value) {
if (currentNode == null) {
return null;
}
if(currentNode.getData().compareToIgnoreCase(value) == 0) {
return currentNode.getData(); //not executing
}
if (currentNode.getData().compareToIgnoreCase(value) > 0) {
return find(currentNode.getLeft(), value);
} else {
return find(currentNode.getRight(), value);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.