在我的下面的程序中,我在第二个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;
}
答案 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。