2012-12-07 29 views
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; 

       } 

     } 
    }} 

如何擺脫這個錯誤:並非所有的代碼路徑都返回一個值?如何擺脫這個錯誤:不是所有的代碼路徑都返回一個值?

錯誤: * 資產/腳本/國際象棋/ Bishop.cs(237,22):錯誤CS0161:`Bishop.search(串[] [],整型,字符串)':不是所有的代碼路徑返回值 *

回答

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; 
} 

更普遍的:編譯器錯誤信息是相當清楚在這裏 - 有,你可以得到該方法的末尾,沒有返回任何東西的方式。值得回顧一下,試着想一想爲什麼自己無法解決這個問題。您是否對編譯器錯誤消息給予了足夠的關注?在所有情況下,儘管通過了方法可能做的所有事情嗎?你下次怎麼處理這個更好?

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; // <---- 
} 
0

出現這種情況是因爲你的代碼的所有可能的執行路徑不返回value.try出返回某一值時,循環是這樣的:

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; 
    } 
0

你不是你的循環外返回任何東西。這是因爲你得到這個錯誤信息。像這樣使用它;

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; 
} 
+2

返回0對我來說看起來像個壞主意 - 這與在第一行中找到它的結果是一樣的... –

+0

Ups,你說得對。謝謝喬恩。編輯。 –

相關問題