好的,我有一个奇怪的问题。代码如下:
方法名称为returnMultiPartHeading
if (recursionCount > 6 || i == list.size() - 1)
return -1;
multiPartHeading = multiPartHeading + " " + list.get(i + 1).getText();
Token token = new Token();
token.setText(multiPartHeading);
if (isHeadingType(token)) {
System.out.println("found " + multiPartHeading);
System.out.println("returning ...");
System.out.println("I is " + (i + 1));
return (i + 1);
} else {
returnMultiPartHeading(list, i + 1, multiPartHeading,
++recursionCount);
}
System.out.println("returning -1");
return -1;
}
示例运行的输出是:
found xyz
returning...
I is 2
returning -1
为什么会这样? if (isHeadingType(token))
评估为true
,打印两条消息,然后完全跳过return i+1
并转到return -1
。在我调用它的地方,我得到-1作为返回值而不是得到2.为什么会发生这种情况?从未见过这种行为。
答案 0 :(得分:5)
这是因为在else
块中,您实际上返回递归调用的结果。您只需调用方法,忽略其结果,然后进入下面的部分(使用return -1
)。
您需要将其他块更改为
else {
return returnMultiPartHeading(list, i + 1, multiPartHeading,
++recursionCount);
}
(假设您的方法确实被称为returnMultiPartHeading
,这听起来不合适)
答案 1 :(得分:2)
看起来执行了两个调用,第一个写了
found xyz
returning...
I is 2
和第二个
returning -1
因为它是一种递归方法,我认为这就是原因
答案 2 :(得分:1)
if
块是第二个递归调用,它返回第一个递归调用,可能由else
块调用。在else
块中,您不返回值。因此它会跳过并返回-1。