为什么在此函数中返回false

时间:2010-04-25 20:29:56

标签: java

在我的下面的程序中,我在第二个th语句中将变量true设置为if。 我很好奇为什么它后来以false返回。

public boolean nodeExist(TreeNode Tree, T value){

    boolean th = false;

    if(Tree.getValue()!= null){

        if(value == Tree.getValue()){

            th = true;

        }else{

            if(value.compareTo((T) Tree.getValue()) < 0){

                nodeExist(Tree.getLeft(), value);

            }else{

                nodeExist(Tree.getRight(), value);
            }

        }

    }else{

        th = false;

    }

    return th;

}

3 个答案:

答案 0 :(得分:5)

您可能会查看将th设置为true的递归调用。但是当该调用返回其调用者时, th仍为false,然后返回。您需要分配递归被调用者的结果:

        if(value.compareTo((T) Tree.getValue()) < 0){

            th = nodeExist(Tree.getLeft(), value);

        }else{

            th = nodeExist(Tree.getRight(), value);
        }

答案 1 :(得分:1)

你已经得到了答案。将来,为了防止这样的错误,如果可以的话,最好立即return价值。可以拥有多个return;如果使用得当,它可以读取更易读的代码。

public boolean nodeExist(TreeNode Tree, T value){
    if (Tree.getValue() == null) return false;

    if (value == Tree.getValue()) return true;

    if (value.compareTo((T) Tree.getValue()) < 0) {
       return nodeExist(Tree.getLeft(), value);
    } else {
       return nodeExist(Tree.getRight(), value);
    }
}

另见


此外,我注意到您使用==代替equals进行对象比较(即T不能是基本类型)。这很少是正确的; equals几乎总是真正的意图。

另见


还有一个样式建议,请遵循Java的命名约定,其中变量名以小写字母开头,大写字母用于内部单词(因此,somethingLikeThis)。

编程不是为了让事情正确,而是为了让事情变得可读。学习并采用良好的编码风格,并遵循既定的惯例。

答案 2 :(得分:0)

在您执行compareTo的部分中,未设置th值。如果满足此条件,则永远不能将其设置为true。