1

当我设置它时如何保存“标志”。例如,当我处于阻塞状态时

if (hashFunction(value) == hashFunction(node.value))
{

    flag = true;
    return 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;
}
4

2 回答 2

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;

实际上,由于您已经返回falseifnode为 null,因此您可以使用:

return findPrivate(value, node.left);

在这种情况下。我怀疑你可以很简单地按照这些思路重构你的代码......

于 2013-03-24T14:49:14.700 回答
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
    }
}

您不需要实际保存 a flag,您只需要保存return该值。

于 2013-03-24T14:55:16.033 回答