如何从返回值的函数中返回任何内容?
我有一个二叉搜索树,我想删除一个节点。
我需要得到它的父,所以我写了一个函数:
private BSTreeNode getParent(BSTreeNode root, BSTreeNode node) { if(root == null) return null; if(node.element().lessThan(root.element())) { if(root.getLeft() != null && root.getLeft().element().equal(node.element())) return root; else getParent(root.getLeft(), node); } else { if(root.getRight() != null && root.getRight().element().equal(node.element())) return root; else getParent(root.getRight(), node); } }
与C / C ++不同,Java给出了以下错误:
This method must return a result of type BSTreeNode
它强制我在函数的最后一行返回一个值。
如何在我的function上下文中修复它?
您的function在每种可能的情况下都没有回报。 你有:
if (null)... if (less than root)... else ( if ...) else (no return!)
如果它不为空,你会返回什么,并进入最后的其他? 什么都没有归还。
您可以在else语句中return getParent...
或者在函数末尾return null
(不在if或else语句中)
我经常看到这样的代码来覆盖if语句都没有返回值的事件。
public int getAnswer() { if (answer.equals("yes")) return 0; else if (answer.equals("no")) return 1; return null; }
你应该对此很好:
private BSTreeNode getParent(BSTreeNode root, BSTreeNode node) { if(root == null) return null; if(node.element().lessThan(root.element())) { if(root.getLeft() != null && root.getLeft().element().equal(node.element())) return root; else return getParent(root.getLeft(), node); } else { if(root.getRight() != null && root.getRight().element().equal(node.element())) return root; else return getParent(root.getRight(), node); } }
添加返回null; 方法结束时的陈述。 我认为这个语句在正常情况下是无法访问的,但添加它只是为了修复编译错误并尝试将会发生什么。
private BSTreeNode getParent(BSTreeNode root, BSTreeNode node) { if(root == null) return null; if(node.element().lessThan(root.element())) { if(root.getLeft() != null && root.getLeft().element().equal(node.element())) return root; else getParent(root.getLeft(), node); } else { if(root.getRight() != null && root.getRight().element().equal(node.element())) return root; else getParent(root.getRight(), node); } return null; }