Java Return语句不起作用!
我这里有一个简单的方法:Java Return语句不起作用!,java,android,Java,Android,我这里有一个简单的方法: private Node addItem(Node current, Node target) { if (current.data.getId() < target.data.getId()) { if (current.larger == null) { current.larger = target; Log.i("BinaryTree", "Added item: " + target
private Node addItem(Node current, Node target) {
if (current.data.getId() < target.data.getId()) {
if (current.larger == null) {
current.larger = target;
Log.i("BinaryTree", "Added item: " + target.data.getId());
return target;
}
return addItem(current.larger, target);
} else {
if (current.smaller == null) {
current.smaller = target;
Log.i("BinaryTree", "Added item: " + target.data.getId());
return target;
}
return addItem(current.smaller, target);
}
}
private Node addItem(节点当前,节点目标){
if(current.data.getId()
当我调试它时,代码到达“return target;”行,然后跳过它,转到最后一个return语句--“returnaddItem(current.small,target);”!
我这辈子从没见过这样的WTF 您可能看到调试跳转“后退”了一个方法
您正在调用addItem递归;因此,最终返回,它实际上将添加它并返回备份;将“似乎”跳转到另一个返回,仅仅因为您从那里返回的方法调用源自那里。如果它到达了该返回语句,那么它肯定应该从该方法返回。如果您不知道(因为它是递归的),请尝试放置一些
System.out.println()
语句
例如:
...
Log.i("BinaryTree", "Added item: " + target.data.getId());
System.out.println("Returning: " + target.toString());
return target;
...
如果它到达返回语句,我应该退出这个方法哦,等等,这是一个递归方法,也许你可以看看字节码。您仅在调试器中获得双返回,或者在程序自行运行时获得双返回?@End.Fouad我知道,但根据堆栈跟踪,没有进行递归。虽然“WTF”在技术上是一个问题,如果你把问题框好,你可能会得到一个更好的答案……我观察了堆栈跟踪,但除了从另一个方法发出的单个调用之外,没有显示递归调用;你能至少从第一次返回的断点开始在你的问题中发布整个stacktrace吗?(因此,在继续返回“last”之前)我认为eclipse没有正确显示堆栈我没有在调试窗口中看到递归调用在调试视图中挂起的线程下面看到的堆栈应该是此时的调用堆栈。或者,您可以在每个return语句之前添加System.out.println,以查看真正调用的内容。