当前位置: 首页 > 知识库问答 >
问题:

Java方法无法使用return语句正确退出

南宫嘉
2023-03-14

我开始写一个二叉树函数。该方法目前的目标是在树中找到节点并返回节点。根值是数据,左边和右边是子树。当我在调试器中单步执行它时,当它到达return语句时,它会跳回第二个if块,并最终返回null。

@Override
public T successor(T d) {



T datas = null;

    if (d.compareTo(this.data) < 0) //If its less than the root
        left.successor(d);

    if (d.compareTo(this.data) > 0) //If its less than the root
        right.successor(d);


    if (d.equals(this.data)){ //We found the node
        datas = this.data;
    }

    return datas;
}

共有1个答案

子车凌龙
2023-03-14

您将忽略递归调用返回的值,并最终在调用堆栈中的特定点返回null(数据)。

将代码更改为:

T datas = null;

if (d.compareTo(this.data) < 0) //If its less than the root
    datas = left.successor(d);

if (d.compareTo(this.data) > 0) //If its less than the root
    datas = right.successor(d);


if (d.equals(this.data)){ //We found the node
    datas = this.data;
}

return datas;

或者,您可以删除局部变量并将其简化为

if (d.compareTo(this.data) < 0) {
    return left.successor(d);
} else if (d.compareTo(this.data) > 0) {
    return right.successor(d);
} 
return this.data;

UPDATE:这假设要搜索的值存在。当左/右为空时,你必须小心。

 类似资料:
  • 我在试着测试我正在学习的一门课。我想运行一个打印报表,以员工的月薪乘以12,给我年薪,然后加10%。除了最后一部分,我已经把所有的工作都做好了 线程“main”Java.util.unknownformatconversionexception:Conversion='r'在Java.util.formatter$formatspecier.Conversion(formatter.Java:26

  • 我有一个方法getNextPrime(int num),它应该在该方法接收的值之后识别最接近的质数。 如果num是偶数,它将递增它并再次调用自己。如果它是奇数,它将运行一个for循环来检查它是否可以被3和num的一半值之间的奇数整除。如果是,那么它将把num增加2,方法将再次调用自己,否则它将返回新的num值,这是一个质数。 问题是,当程序到达return语句时,它将跳转到if语句并返回num 1

  • 问题1: 为什么下面的代码在没有return语句的情况下进行编译? 注意:如果在while之后添加return,则会得到。 问题2: 另一方面,为什么下面的代码会编译, 即使下面的不是。

  • 为什么我不能在不使用return语句的情况下运行此代码段?

  • return 关键字并不是专门用于结束循环的,return 语句用于终止函数的执行或退出类的方法,并把控制权返回该方法的调用者。如果这个方法带有返回类型,return 语句就必须返回这个类型的值;如果这个方法没有返回值,可以使用没有表达式的 return 语句。 return 语句的一般语法格式如下: 如果一个方法使用了 return 语句并且后面跟有该方法返回类型的值,那么调用此方法后,所得到的

  • 我是一个初学者,我试图通过应用极小算法来开发Connect4游戏,我被困在决定是最小玩家回合还是最大玩家回合的条件下。我有一种感觉,这是一种简化,但我已经想了两天试图弄清楚。有什么帮助吗?