Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么这个方法总是返回-1_Java_If Statement_Recursion_Return_Return Value - Fatal编程技术网

Java 为什么这个方法总是返回-1

Java 为什么这个方法总是返回-1,java,if-statement,recursion,return,return-value,Java,If Statement,Recursion,Return,Return Value,忽略递归调用返回的值: else { node=node.right; deleter(node,key); } 编辑:您应该在此代码中添加一些空检查,否则可能会导致NullPointerException。递归调用effectivlt返回0,但您忽略了调用者的返回值: private int deleter(BSTNode node, int key) { if(node.key==key){ if(node.right==null

忽略递归调用返回的值:

 else {
        node=node.right;
        deleter(node,key);
 }

编辑:您应该在此代码中添加一些空检查,否则可能会导致NullPointerException。

递归调用effectivlt返回0,但您忽略了调用者的返回值:

private int deleter(BSTNode node, int key) {
    if(node.key==key){
        if(node.right==null && node.left==null){
            node=null;
            return 0;
        }
    }
    else if(key<node.key){
        node=node.left;
        return deleter(node,key);

    }
    else {
        node=node.right;
        return deleter(node,key);
    }


    return -1;
}

这是因为递归代码中唯一的返回语句是-1。不只是调用deleter,只需在前面添加return语句并删除最后一个return-1;语句。为什么需要返回-1?@SMA如果没有找到匹配项,或者如果找到匹配项,则该方法应返回-1,但不要将节点设置为null。那么我该怎么办,如果删除返回的递归函数,就可以了?您的最后一句话不正确。如果node.key==key为true,但node.right==null&&node.left==null为false,则此方法将不返回任何内容。因此,如果没有最后的返回语句,代码将无法通过编译。
private int deleter(BSTNode node, int key) {
    if(node.key==key){
        if(node.right==null && node.left==null){
            node=null;
            return 0;
        }
    }
    else if(key<node.key){
        node=node.left;
        return deleter(node,key);

    }
    else {
        node=node.right;
        return deleter(node,key);
    }


    return -1;
}
private int deleter(BSTNode node, int key) {
    if(node.key == key){
        if(node.right == null && node.left == null){
            node = null;
            return 0;
        }
    }else if(key < node.key){
        node = node.left;
        return deleter(node,key);      // return here    
    }else {
        node = node.right;
        return deleter(node,key);      // return here
    }   
    return -1;
}