Java中If-Else If块报Missing Return Statement错误,已写return仍报错?
为什么这段代码会报Missing Return Statement错误?
嘿,这个问题其实是因为你的代码存在未覆盖的返回路径,咱们来拆解一下:
你确实在部分分支里写了return,但仔细看elem < root.data和elem > root.data这两个逻辑分支:
- 只有当递归调用
rootToNodePath(root.left,elem)返回的out1不为null时,你才执行return out1 - 同理,
elem > root.data分支里也只有out2不为null时才会触发return
如果要找的元素不在左子树/右子树里,递归调用会返回null,这时候if(out1 != null)或if(out2 != null)的条件就不成立,这两个分支就没有对应的return语句。编译器会判定:“这里有一条代码路径走到方法末尾了,但没返回任何符合要求的值!”所以就抛出了Missing Return Statement错误。
修复方法
你只需要在方法的最后(或者每个分支的条件判断外)添加一个默认的return语句,比如返回null,来覆盖所有可能的代码路径:
public static ArrayList<Integer> rootToNodePath(Node root,int elem){ if(root == null){ return null; } if(elem < root.data){ ArrayList<Integer> out1 = new ArrayList<Integer>(); out1 = rootToNodePath(root.left,elem); if(out1 != null){ out1.add(root.data); return out1; } } else if(elem > root.data){ ArrayList<Integer> out2 = new ArrayList<Integer>(); out2 = rootToNodePath(root.right,elem); if(out2 != null){ out2.add(root.data); return out2; } } else{ ArrayList<Integer> output = new ArrayList<Integer>(); output.add(root.data); return output; } // 添加这一行,覆盖所有未匹配的路径 return null; }
这样不管递归是否找到目标元素,所有代码路径都有明确的返回值,编译器就不会再报错了。
内容的提问来源于stack exchange,提问作者alphcoder
相关产品推荐
相关产品推荐

