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 に答える