递归方法 - 并非所有代码路径都返回一个值!

时间:2010-06-26 16:17:44

标签: recursion

它表示并非所有代码路径都返回值

private string Fisrt(string nonTerminal)
    {
        for (int j = 0; j < 6; j++)
        {
            if (Tokens[j, 0] == nonTerminal)
            {
                if (char.IsLower((char)Tokens[j, 3][0]))
                    return (Tokens[j, 3]);
                else
                    Fisrt(Tokens[j, 3]);
            }
        }
    }

3 个答案:

答案 0 :(得分:1)

例如,如果Tokens[j, 0]j的值为0到5)都不是nonTerminal,该怎么办?

或者,如果Tokens[j, 3][0]永远不会小写?

答案 1 :(得分:1)

private string Fisrt(string nonTerminal)
    {
        for (int j = 0; j < 6; j++)
        {
            if (Tokens[j, 0] == nonTerminal)
            {
                if (char.IsLower((char)Tokens[j, 3][0]))
                    return (Tokens[j, 3]);
                else
                    return Fisrt(Tokens[j, 3]);
                 /* ^ add a return here */
            }
        }

        return SOMETHING;
     /* ^ You also need to add some return value here */
    }

您还需要确定在for循环正常退出的情况下要返回的字符串值(或null)。

答案 2 :(得分:1)

您应该返回递归步骤

`return First(Tokens[j, 3])`

并处理外部forif以外的案例。