在java中打破递归方法

时间:2013-03-24 14:47:40

标签: java

设置时如何保存“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;
}

2 个答案:

答案 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该值。