0

好的,我有一个奇怪的问题。代码如下:方法名是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。为什么会发生这种情况?从未见过这种行为。

4

3 回答 3

5

这是因为在您的else块中,您实际上并没有返回递归调用的结果。您只需调用该方法,忽略其结果,然后进入下面的部分(带有return -1)。

您需要将 else 块更改为

else {
     return returnMultiPartHeading(list, i + 1, multiPartHeading,
                ++recursionCount);
}

(假设您的方法确实被调用returnMultiPartHeading,这听起来不正确)

于 2013-10-01T07:38:42.057 回答
2

看起来像执行了两个调用,第一个写了

found xyz
returning...
I is 2

第二个

returning -1

因为它是一种递归方法,我认为这就是原因

于 2013-10-01T07:40:20.893 回答
1

if块是第二个递归调用,它返回到第一个递归调用,这可能是由该else块调用的。在else块中,您不返回值。因此它跳过并返回-1。

于 2013-10-01T07:39:28.137 回答