2016-03-07 69 views
1

該函數的數量隨着該數的分量的立方體的總和進行比較。例如abc = a^3 + b^3 + c^3。有一個錯誤轉換,請幫助。在周圍方法POW線夫特錯誤,不能轉換Int類型爲int 16

func triKuba (i:Int16, k:Int16, var array:[Int16]=[]) ->Int16{ 

    for var i=100;i<1000; i++ { 
     array.append(Int16(i)) 
     if array[i] == pow(array[i]/10) + pow(array[i]/100) + pow(array[i]%10) { 
      return array[i] 
     } else { 
      return 0 
     } 
    } 
} 
triKuba(0, k: 0) 

下一個錯誤「無法調用戰俘與類型的Int16的參數列表」如果我理解正確的,方法戰俘是你貼有幾個語法問題^ 3

+1

線:array.append(i) 錯誤:無法將Int類型的值轉換爲預期的參數類型Int16 – redisky

+0

method pow如何? – redisky

+0

它很不清楚你想在這個功能中做什麼。使用array.append(i)會將i添加到數組的末尾,如果數組爲空且您將一個元素附加到它,它將是一個元素長,在下一行中,您使用值1進行下標,在第一次迭代是100,這將導致一個索引超出範圍的錯誤 –

回答

1

我強烈懷疑這是你在找什麼:

func arithmeticRoot3(var value: Int) -> Int { 
    var result = 0 

    while value > 0 { 
     let digit = value % 10 
     result += digit * digit * digit 
     value /= 10 
    } 

    return result 
} 

func triKuba() -> [Int] { 
    return (100...999).filter() { 
     $0 == arithmeticRoot3($0) 
    } 
} 

print(triKuba()) // [153, 370, 371, 407] 
+0

優秀的代碼。我將開始編程..所以什麼是「$ 0 == arithmeticRoot3($ 0)」?你可以用俄語回答:) – redisky

+0

這是一個英文網站:)。 '$ 0 == arithmeticRoot3($ 0)'是一個帶[shorthand參數]的閉包(https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html#//apple_ref/doc/uid/TP40014097-CH11-ID100)傳遞給[filter](https://developer.apple.com/library/ios/documentation/Swift/Reference/Swift_SequenceType_Protocol/index.html#//apple_ref/swift/intfm/ SequenceType/s:FeRq_Ss12SequenceType_SsS_6filteruRq_S__Fq_FzFzqqq_S_S9GeneratorSs13GeneratorType7ElementSbGSaqqq_S_9GeneratorS0_7Element_)'Range '值的方法。 – courteouselk

+0

整個事件只是遍歷從100到999的所有整數,並且只過濾那些等於它們數字的立方體之和的東西。 – courteouselk

0

的方法。我修好了他們。下面的工作方法:你越來越

func triKuba (i:Int16, k:Int16, var array:[Int16]=[]) ->Int16{ 

    for var i=100;i<1000; i++ { 
     array.append(Int16(i)) 

     if Double(array[i]) == pow(Double(array[i])/10, 3.0) + pow(Double(array[i]/100), 3.0) + pow(Double(array[i]%10), 3.0) { 
      return array[i] 
     } else { 
      return 0 
     } 
    } 
} 

誤差約爲從Int失蹤轉換爲Int16(i)

+0

方法pow?喜歡這個。 如果數組[I] == POW(陣列[I]/10)+ POW(陣列[I]/100)+ POW(陣列[I]%10) 我有錯誤:不能與參數列表類型調用POW Int16。 pow是一個立方體? – redisky

+0

pow方法有什麼問題?我在你的代碼中看不到它? – RaffAl

+0

對不起,現在更新。 – redisky

-1

在for循環您聲明一個新的i變量,它隱含爲Int型的,而不是Int16 。 (由於陰影,這是在你的函數體中正在使用的變量,你傳遞中從未被使用的參數i

我建議要麼改變類型的函數參數是Int類型的,像這樣:

func triKuba (var i: Int, var k: Int, var array: [Int]=[]) -> Int { 

或投你Int16變量Ints像這樣:

array.append(Int16(i)) 
0

而不是僅僅解決您的問題,我要說明的問題是什麼,以及爲什麼會拋出錯誤。有了這些信息,你應該能夠解決這個問題(以及將來的類似問題!)。

在斯威夫特,你不能總是做這樣的事情乘int型和浮動,或從一個Double類型的返回函數返回一個Int16的。對你來說,它可能是顯而易見的,「鑄造」變量到預期的類型就可以了 - 但編譯器不知道

如果你相信這將是安全的,可以「投」變量所需的類型:

Int(int16Variable) // int16Variable has been casted to an 'Int'.