0

OK私は奇妙な問題を抱えています。コードは次のとおりです。メソッド名は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、2 つのメッセージを出力してから、 を完全にスキップしreturn i+1return -1代わりに に移動します。私が呼び出した場所では、戻り値として 2 ではなく -1 が返されます。これはなぜですか?? この動作は見たことがありません。

4

3 に答える 3

5

これは、ブロック内で再帰呼び出しの結果を実際に返さelseないためです。メソッドを呼び出し、その結果を無視してから、以下のセクション ( を使用) に進むだけです。return -1

else ブロックを次のように変更する必要があります。

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

(あなたのメソッドが実際に呼び出されていると仮定するとreturnMultiPartHeading、どういうわけか正しく聞こえません)

于 2013-10-01T07:38:42.057 に答える
1

ifブロックは、おそらくブロックによって呼び出された最初の再帰呼び出しに戻る 2 番目の再帰呼び出しですelse。ブロックではelse、値を返しません。したがって、スキップして -1 を返します。

于 2013-10-01T07:39:28.137 に答える