2017-06-16 76 views
-1

我收到錯誤「缺少函數返回'Bool'」但我找不到原因。返回一個函數中的Bool

func isPrime(_ number: Int) -> Bool { 
    for primeDivisors in 2..<number { 
     if number % primeDivisors == 0 { 
      return true 
     } else { 
      return false 
     } 
    } 
} 

isPrime(13) 
+0

如果你調用'isPrime(1)'''for'循環將永遠不會執行,並且函數永遠不會碰到'return'語句。 – vacawama

回答

1

您的主要檢查器不正確,因爲循環的第一次迭代會返回一個值。在決定數字是否爲素數之前,您必須經歷整個循環。

func isPrime(_ number: Int) -> Bool { 
    for primeDivisors in 2..<number { 
     if number % primeDivisors == 0 { 
      return false 
     } 
    } 
    return true 
} 

注意,該代碼是低效的,因爲它繼續檢查整除的次數比是必要的:你可以停止在到達的number平方根檢查。

+0

重要的是要注意你的「假」和「真」條件是正確的; OP的條件與他們應該得到的*相反。 – NRitH

+0

@NRitH這絕對是真的 - 這就是爲什麼我切換他們。謝謝! – dasblinkenlight

0

這是抱怨,因爲不是所有的代碼路徑最終返回的東西。如果number小於2,會發生什麼情況?然後您的for循環以及其中的返回語句將永遠不會被調用,並且在for循環完成後沒有return