java - return 语句的极其奇怪的行为 : Java

标签 java

好吧,我有一个奇怪的问题。代码如下: 方法名称为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 并转到相反,返回-1。在我调用它的地方,我得到 -1 作为返回值,而不是 2。为什么会发生这种情况?从未见过这种行为。

最佳答案

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

您需要将 else block 更改为

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

(假设您的方法确实名为 returnMultiPartHeading,这听起来不太正确)

关于java - return 语句的极其奇怪的行为 : Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19110518/

相关文章:

java - 如何仅设置具有流式布局的面板的首选宽度?

java - 执行特定的参数化类方法

java - 如何向 JLabel 添加文本

java - 为什么@ConfigurationProperties需要getter?

java - 在Eclipse中,变量不显示扩展类的子变量

java - 椭圆形多态性

java - 将 map 添加到列表会导致多次添加相同的 map

java - Android 将文本更改为点并应用动画

java - 需要身份验证。 http ://localhost:8080 requires a username and password in Tomcat

java - Android Webview,与 Anchors 一起使用