我不知道为什么我不能在我的代码中返回一个值,它就是:
private int depth(Position<Integer> p) {
try{
if (ab.isRoot(p))
return 0;
else
return 1+depth(ab.parent(p));
}catch(InvalidPositionException | BoundaryViolationException e) {System.out.println(e.getMessage());}
}
它没有检测到返回。我知道这是一个尝试捕获,它可以捕获一个例外,但我很困惑,因为在我阅读的书(数据结构和算法 - 古德里奇和塔马西亚第4版)他&#39;不在参数中发送一个int(在递归中可能有用来保存值)
编辑:解决了,谢谢大家!
答案 0 :(得分:3)
它正在“检测”return
。
只是在所有程序控制路径上没有明确的return
:您需要在catch
块中返回一些内容。
我个人虽然将函数本身标记为能够抛出当前catch
的异常,并处理调用站点的异常。然后你的功能减少到
private int depth(
Position<Integer> p
) throws InvalidPositionException, BoundaryViolationException
{
return ab.isRoot(p) ? 0 : 1 + depth(ab.parent(p));
}
答案 1 :(得分:1)
您必须从catch
块返回以及在异常的情况下,永远不会到达try块内的return语句。
答案 2 :(得分:1)
您的方法签名表示它返回一个整数并且永不失败(不会抛出任何异常)。
如果您的代码中引发了异常,那么您的实施不符合此合同,但在这种情况下您不会返回任何值。
您可以通过两种方式修复它。您可以在catch块中返回一个值,也可以删除try catch块并将捕获的异常添加到方法的签名中。哪种解决方案更好取决于您的代码究竟做了什么,以及您认为它将如何使用。
另外请记住捕获异常,如果你不小心这样做,只记录就是一种不好的做法。