3
int search(string [][]mat, int n, string x){
//set indexes for top right element
    for(int i = 0; i<n; i++)
    {
        for(int j = n-1; j>=0; j--)
        {
                     if ( mat[i][j] == x )
              {
                 Debug.Log(x +""+"Found at "+i +" "+j);
                // int[] n2 = new int[] {2, 4, 6, 8};
                // int [] xyz = new int [] {i, j};
                           return i;

              }

        }
    }}

如何摆脱此错误:并非所有代码路径都返回值?

错误: * Assets/Scripts/Chess/Bishop.cs(237,22):错误 CS0161:`Bishop.search(string[][], int, string)':并非所有代码路径都返回值*

4

4 回答 4

8

如果您永远找不到 ,请计算出您想要发生的事情x,并在方法结束时返回。例如:

// Fixed naming conventions and indentation...
// Why do we need n here at all? Why not just use the length of the array?
int Search(string[][] mat, int n, string x)
{
    //set indexes for top right element
    for (int i = 0; i < n; i++)
    {
        // Why are we looking backwards here?
        for (int j = n - 1; j >= 0; j--)
        {
            if (mat[i][j] == x)
            {
                // More readable formatting...
                Debug.Log(string.Format("{0} found at {1}, {2}", x, i, j));
                return i;   
            }   
        }
    }
    // Not found: return -1 to indicate failure. Or you could throw an exception
    return -1;
}

更一般地说:编译器错误消息在这里相当清楚 - 有一种方法可以让您在不返回任何内容的情况下到达方法的末尾。值得退后一步,试着想想为什么你不能自己解决这个问题。您是否对编译器错误消息给予了足够的关注?您是否考虑过该方法在所有情况下可能会做的所有事情?下次你怎么能更好地处理这个问题?

于 2012-12-07T10:10:14.980 回答
2

您需要return在循环之外添加一个。
想一想:如果您将 -1 传递给n怎么办?循环永远不会执行,因此return永远不会到达当前存在的循环。如果mat数组不包含x.

int search(string [][]mat, int n, string x)
{
    for(int i = 0; i<n; i++)
    {
        for(int j = n-1; j>=0; j--)
        {
            if ( mat[i][j] == x )
            {
                Debug.Log(x +""+"Found at "+i +" "+j);
                return i;
            }
        }
    }

    return -1; // <----
}
于 2012-12-07T10:09:45.597 回答
1

您不会在循环之外返回任何内容。这是因为您收到此错误消息。像这样使用它;

int Search(string [][]mat, int n, string x)
{
    //set indexes for top right element
    for(int i = 0; i<n; i++)
    {
        for(int j = n-1; j>=0; j--)
        {
            if (mat[i][j] == x)
            {
                Debug.Log(x +""+"Found at "+i +" "+j);
                // int[] n2 = new int[] {2, 4, 6, 8};
                // int [] xyz = new int [] {i, j};
                return i;

            }   
        }
    }
    return -1;
}
于 2012-12-07T10:11:45.150 回答
0

发生这种情况是因为代码的所有可能执行路径都没有返回值。尝试从 for 循环中返回一些值,如下所示:

int search(string [][]mat, int n, string x){
        //set indexes for top right element
            for(int i = 0; i<n; i++)
            {
                for(int j = n-1; j>=0; j--)
                {
                             if ( mat[i][j] == x )
                      {
                         Debug.Log(x +""+"Found at "+i +" "+j);
                        // int[] n2 = new int[] {2, 4, 6, 8};
                        // int [] xyz = new int [] {i, j};
                                   return i;

                      }

                }         
            }
      return -1;
    }
于 2012-12-07T10:11:32.220 回答