我正在嘗試在不使用 sqrt() 方法的情況下進行生根 Swift 練習。
我的想法如下:
import Foundation
func rooting(number:Int) -> Int {
for i in 1...100 {
if i * i == number {
var Root = i
break }
return Root //here
}
return Root //here
}
print(rooting(number:9))
但是在我給你留下評論的那一行,我得到了Cannot find 'Root' in scope錯誤。當我在運行函式之前嘗試將 root 初始化為整數時,該函式要么使用我初始化 Root 變數的值,要么如果我嘗試將其初始化為可選整數或空陣列,則會出現一些錯誤。
我在這里的想法有什么問題?
uj5u.com熱心網友回復:
好的,這是我對齊后的代碼。
import Foundation
func rooting(number: Int) -> Int {
for i in 1...100 {
if i * i == number {
var Root = i
break
}
return Root
}
return Root
}
print(rooting(number: 9))
問題是您Root在嘗試使用變數之前在結束的范圍內創建變數。本質上,該Root變數僅存在于以下段中:
import Foundation
func rooting(number: Int) -> Int {
for i in 1...100 {
if i * i == number {
var Root = I //Root variable starts existing
break
} //Root variable no longer exists
return Root
}
return Root
}
print(rooting(number: 9))
這是因為它的范圍是if陳述句。要解決此特定問題,您可以將代碼更改為:
import Foundation
func rooting(number: Int) -> Int {
for i in 1...100 {
if i * i == number {
return i
}
}
}
print(rooting(number: 9))
Root因為除了退貨之外,您什么也不做。當然,這仍然行不通,因為你不能保證回傳任何東西(如果number是 8 怎么辦?),并且你說該函式將始終回傳一個Int.
下面是一個生根函式實作的簡單示例:
import Foundation
func rooting(number: Int) -> Int? {
guard number > 0 else { return nil }
for i in 0...(number/2) {
if i * i == number {
return i
}
}
return nil
}
print(rooting(number: 9))
如果數字有平方根,則回傳;否則,函式回傳nil。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/414415.html
標籤:
上一篇:dofor回圈在完成后釋放記憶體
下一篇:為鏈表類創建一個for回圈
