如果当时的声明工作,为什么不这样呢?

时间:2015-05-07 23:02:13

标签: java

public boolean search(int value) {
    search(root,value);


}

private boolean search(Node node, int value) {

    if (node == null) {return false;}
    else if(node.getValue() == value){return true;}
    else if (node.getValue() > value) { System.out.println("searching left" + node.getValue() + '>' + value); search(node.left,value);}
    else  if (node.getValue() < value)  { System.out.println("searching right" + node.getValue() + '<' + value); search(node.right,value);}


}

出于某种原因eclipse告诉我,我需要一个返回类型,即使我已经有一个。添加&#34;返回false&#34;最后安抚eclipse只是让if语句返回它时不返回东西。

4 个答案:

答案 0 :(得分:2)

如果达到return>个案,则您没有<声明。在这两种情况下,您需要return相应的递归调用返回的内容。

编译器仍然会抱怨,因为它不会意识到你已经涵盖了所有可能的情况;它不考虑价值观。如果你也没有条件将最后一个案例变成else,那么这将满足编译器。

此外,在顶部search方法中,返回对另一个search方法的调用返回的内容。

答案 1 :(得分:1)

public boolean search(int value) {
    search(root,value);

    // add a return here
}

private boolean search(Node node, int value) {
    if (node == null) {
        return false;
    } else if (node.getValue() == value) {
        return true;
    } else if (node.getValue() > value) {
        System.out.println("searching left" + node.getValue() + '>' + value);
        return search(node.left, value);
    } else {
        System.out.println("searching right" + node.getValue() + '<' + value);
        return search(node.right, value);
    }
}

答案 2 :(得分:0)

如果node.getValue()大于或小于value,则会打印邮件,但不会返回任何内容。

您是不是要在这些情况下返回搜索结果?

private boolean search(Node node, int value) {
    if (node == null) {
        return false;
    } else if(node.getValue() == value){
        return true;
    } else if (node.getValue() > value) { 
        System.out.println("searching left" + node.getValue() + '>' + value); 
        return search(node.left,value);
    } else  if (node.getValue() < value)  { 
        System.out.println("searching right" + node.getValue() + '<' + value); 
        return search(node.right,value);
    }
}

答案 3 :(得分:0)

最重要的是,在最后两个if语句中没有return语句,但即使在它们中都放置一个return语句也不能完全解决错误。

当拥有带返回值的方法时,必须始终在if语句之外或else语句中返回值。 (在其他内部,如果不起作用)。

基本上,编译器无法知道任何if语句是否为真。需要保证其中一个语句为真并返回一个值。

即使它遵循以下模式也是如此:

if (a == b)
    return true;
if (a > b)
    return false;
if (a < b)
    return true;

作为一个人,我们可以理解这些陈述中至少有一个是真的,但编译器却没有。如果你知道至少有一个陈述是真的,你可以简单地在最后放一个return;语句,知道它永远不会被调用。