2016-07-10 45 views
2

我對編碼(特別是c#)相當陌生 - 這是一個編程基礎類的任務 - 我沒有找到答案 - 我正在找人解釋爲什麼我得到這兩個'錯誤是一個布爾方法,我應該創建它來檢查用戶是猜測一個字母還是一個hang子手遊戲中的完整單詞。 我得到的錯誤是'檢測到無法檢測到的代碼 - 對於idx ++部分 - 這是沒有意義的,因爲我已經在其他單獨的方法中使用它.. 和Program.CheckGuess(char [],char [],char [],字符串:不是所有的代碼路徑返回一個值爲什麼會出現這些錯誤? c# - hangman遊戲

我知道我沒有完全完成方面它在我的臉可能凝視 - 只是在尋找一些指導謝謝

static bool CheckGuess(char[] secrets, char[] mask, char[] letters, string guess) 
{ 
    int misses = 0; bool condition = false; 

    for (int idx = 0; idx < secret.Length; idx++) 
    { 
     guess.ToCharArray(); 
     if (mask[idx] == guess[idx]) 
     { 
      //reveal character or word 
      condition = true; 
     } 
     else 
     { 
      misses = misses + 1; 
      condition = false; 
     } 
     return condition; 
    } 

} 
。。

回答

1

您應該明白,return語句在執行時會使控制跳出方法並返回給調用方。

在你的代碼中,你的return是語句放在for循環中。當執行for循環的迭代時,控件立即跳出方法並返回給方法的調用者。

正如您所知,在迭代完成執行時,會執行for循環頭文件(idx++)中的最後一部分。但是,在你的情況下,迭代永遠不會完成,因爲當控制達到return時它將跳回到調用者。這就是發生第一個錯誤的原因。

您也應該瞭解,無論如何,沒有void作爲返回類型的每種方法都需要return

那麼如果for循環的條件(中間部分)永遠不會是true? for循環永遠不會被執行,對吧?如果for循環沒有執行,那麼該方法返回什麼?

錯誤指出並非所有的代碼路徑都返回一個值,因爲如果未執行for循環,該方法將不會返回。

爲了解決這個問題,你只需要移動return聲明出來的for循環:

static bool CheckGuess(char[] secrets, char[] mask, char[] letters, string guess) 
{ 
    int misses = 0; bool condition = false; 

    for (int idx = 0; idx < secret.Length; idx++) 
    { 
     guess.ToCharArray(); 
     if (mask[idx] == guess[idx]) 
     { 
      //reveal character or word 
      condition = true; 
     } 
     else 
     { 
      misses = misses + 1; 
      condition = false; 
     } 
    } 
    return condition; 
} 
+0

這對我來說總是那麼小 - argh - 但是謝謝你的解釋。我確實知道 - 但由於某種荒謬的原因,我認爲我已經在for循環之外有了return語句...是的,休息時間。再次感謝! – Th1rt33nth

1

因爲你有一個return陳述

當這return在你的for循環已到達,程序跳出循環,從而使您無法訪問i++

+0

該死!它總是這麼少!爾加!謝謝 - 這解決了這兩個問題......真的,謝謝。現在是休息很長時間的時候了。 – Th1rt33nth