Java 为什么返回语句没有执行?
我试图在二叉树中实现一个find方法。 当方法需要返回一个值,但它似乎不执行该语句时,就会出现问题,即使在执行的分号中有其他行Java 为什么返回语句没有执行?,java,binary-tree,Java,Binary Tree,我试图在二叉树中实现一个find方法。 当方法需要返回一个值,但它似乎不执行该语句时,就会出现问题,即使在执行的分号中有其他行 public String find(Node currentNode, String value) { if(isEmpty()) { return null; } else { if(currentNode.getData().compareToIgnoreCase(value) == 0)
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
}
公共字符串查找(节点currentNode,字符串值)
{
if(isEmpty())
{
返回null;
}
其他的
{
如果(currentNode.getData().compareToIgnoreCase(值)==0)
{
System.out.println(“当前->”+currentNode.getData());//显示
返回currentNode.getData();//未执行
}
if(value.compareToIgnoreCase(currentNode.getData())<0)
{
查找(currentNode.getLeft(),值);
}
else if(value.compareToIgnoreCase(currentNode.getData())>0)
{
查找(currentNode.getRight(),值);
}
}
返回null;//始终执行
}
我预期为“a”,但在执行该行时返回null。
find(currentNode.getLeft(), value);
语句返回currentNode.getData()代码>正在执行,但您忽略了递归调用返回的内容。(与getRight()
语句类似)然后if/else语句完成,并执行底部的returnnull
。这就是为什么您总是得到null
返回递归调用返回的任何内容,以便返回的值正确传播回原始调用,例如:
return find(currentNode.getLeft(), value);
当您执行该行时
find(currentNode.getLeft(), value);
语句返回currentNode.getData()代码>正在执行,但您忽略了递归调用返回的内容。(与getRight()
语句类似)然后if/else语句完成,并执行底部的returnnull
。这就是为什么您总是得到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);
}
}
您必须使用返回递归调用的数据,现在您将忽略它。此外,您总是返回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);
}
}
请创建一个。显示示例输入并解释发生的情况。不要只是向我们扔代码。更糟糕的是,代码不完整。请阅读,谢谢。您可能需要在递归调用find
之前添加return
,您永远不会对find
调用的返回值执行任何操作。您只需调用它,但不捕获返回的结果。您可能打算返回find(…)
。您正在调用find
,但没有对其返回值执行任何操作。请创建一个。显示示例输入并解释发生的情况。不要只是向我们扔代码。更糟糕的是,代码不完整。请阅读,谢谢。您可能需要在递归调用find
之前添加return
,您永远不会对find
调用的返回值执行任何操作。您只需调用它,但不捕获返回的结果。您可能打算返回find(…)
。您正在调用find
,但没有对其返回值执行任何操作。