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

问题描述:

它说,不是所有的代码路径返回一个值递归方法 - 并非所有的代码路径都返回一个值!

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]); 
      } 
     } 
    } 
+0

它在函数中声明,返回一个字符串值,但不返回字符串值。将else语句添加到else .. – Chaitanya 2010-06-26 16:19:55

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循环正常退出的情况下返回。

+0

如果'Tokens [j,0] == nonTerminal'永远不会是真的? – Ken 2010-06-26 16:37:45

+0

@Ken,谢谢 - 修改。 – Dolph 2010-06-26 17:41:05

例如,如果没有Tokens[j, 0],具有j值0到5,nonTerminal?如果Tokens[j, 3][0]从不小写?

您应该返回递归步骤

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

和处理外forif外的情况。