设置时如何保存“flag”。例如,当我在阻止时
if (hashFunction(value) == hashFunction(node.value))
{
flag = true;
return flag;
}
在debug flag = true中,但是下一步和指针在
中if (hashFunction(value) < hashFunction(node.value))
{
if (node.left != null)
{
findPrivate(value, node.left);------THERE
} else
{
flag = false;
return flag;
}
}
结果,我的方法返回false。怎么解决?对不起我的英语不好。完整的代码如下。
private boolean findPrivate(T value, Node node)
{
if (node == null)
{
flag = false;
return flag;
}
if (hashFunction(value) == hashFunction(node.value))
{
flag = true;
return flag;
}
if (hashFunction(value) > hashFunction(node.value))
{
if (node.rigth != null)
{
findPrivate(value, node.rigth);
} else
{
flag = false;
System.out.println("value= " + value + " " + flag);
return flag;
}
}
if (hashFunction(value) < hashFunction(node.value))
{
if (node.left != null)
{
findPrivate(value, node.left);
} else
{
flag = false;
return flag;
}
}
return flag;
}
答案 0 :(得分:4)
问题在于,当你递归时,你忽略了返回值:
findPrivate(value, node.left);
我没有仔细查看,但您可能只能将其中的每一个更改为:
return findPrivate(value, node.left);
我还建议完全删除你的flag
变量 - 不清楚它在哪里被声明,但看起来它可能不应该被使用;相反,只需直接返回值。例如:
if (node.left != null)
{
return findPrivate(value, node.left);
} else
{
return false;
}
...然后可以很容易地重构为:
return node.left != null ? findPrivate(value, node.left) : false;
事实上,如果false
为空,则已经返回node
,您可以使用:
return findPrivate(value, node.left);
在那种情况下。我怀疑你可以非常简单地重构你的代码......
答案 1 :(得分:0)
您需要返回来自递归调用的值:
private static final class Node<T> {
protected T value;
protected Node<T> right;
protected Node<T> left;
private boolean findPrivate(T value, Node<T> node) {
if (node == null) {
return false;
}
if (hashFunction(value) == hashFunction(node.value)) {
return true;
}
if (hashFunction(value) > hashFunction(node.value)) {
if (node.right != null) {
return findPrivate(value, node.right);
} else {
return false;
}
}
if (hashFunction(value) < hashFunction(node.value)) {
if (node.left != null) {
return findPrivate(value, node.left);
} else {
return false;
}
}
throw new UnsupportedOperationException("cannot compare hashCodes");
}
private int hashFunction(T value) {
//stuff
}
}
您无需实际保存flag
,只需要return
该值。