2014-11-21 70 views
-4

我試圖找出一個數字是否爲總數。但是我有一個「檢測不到的代碼」的錯誤,我認爲這是「不是所有代碼路徑都返回一個值」的錯誤。這個錯誤似乎發生在i ++的for循環中。任何人都可以幫助我嗎?for循環中檢測到無法訪問的代碼

static void Main(string[] args) 
    { 
     Console.WriteLine(isPrime(10)); 
    } 

    public static bool isPrime(int n) 
    { 
     for (int i = 2; i < n; i++) 
     { 
      if (n % i == 0) 
      { 
       return false; 
      } 
      return true; 
     } 
    } 
+10

你的'return true'應該在for循環之外。 – 2014-11-21 17:55:42

+0

[如何從方法返回值C#基礎](http://www.homeandlearn.co.uk/csharp/csharp_s6p3.html)我建議閱讀和理解如何使用'返回'的功能和返回數據 – MethodMan 2014-11-21 18:19:03

回答

8

「檢測到無法到達的代碼」意味着某些代碼永遠無法執行。試想一下:

int something() 
{ 
    if (true) 
    return 1; 
    else 
    return 2; //Obviously we can never get here 
} 

「並非所有的代碼路徑返回一個值」的意思是你(在你的例子,如「布爾」)定義的返回值的方法,並有一些方法的方法來執行無返回一個值。

考慮:

int something(bool someBool) 
{ 
    if (someBool) 
    return 1; 
    //if someBool == false, then we're not returning anything. Error! 
} 
+0

這個解釋非常好,並有非常好的代碼示例。 – BradleyDotNET 2014-11-21 18:00:16

1

您的代碼有兩個問題:

  1. 你有return true裏面的for循環(以外的任何條件的)。由於return立即退出函數(將控制權返回給調用者),因此for循環的i++語句永遠不會執行(因此是您的錯誤)。您可能打算將它放在for循環之外。

  2. 在循環中的另一個問題是循環不保證執行。如果n通過的是2或更少,那麼您將完全跳過循環,並且在這種情況下沒有返回語句。這是不允許的(因爲你總是需要從一個非void函數返回一個值),所以你會得到一個編譯器錯誤。