夫特错误,不能转换Int类型为int 16
该函数的数量随着该数的分量的立方体的总和进行比较。例如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
我强烈怀疑这是你在找什么:
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 == arithmeticRoot3($ 0)”?你可以用俄语回答:) – redisky
这是一个英文网站:)。 '$ 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
整个事件只是遍历从100到999的所有整数,并且只过滤那些等于它们数字的立方体之和的东西。 – courteouselk
的方法。我修好了他们。下面的工作方法:你越来越
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)
在for循环您声明一个新的i
变量,它隐含为Int
型的,而不是Int16
。 (由于阴影,这是在你的函数体中正在使用的变量,你传递中从未被使用的参数i
我建议要么改变类型的函数参数是Int
类型的,像这样:
func triKuba (var i: Int, var k: Int, var array: [Int]=[]) -> Int {
或投你Int16
变量Ints
像这样:
array.append(Int16(i))
而不是仅仅解决您的问题,我要说明的问题是什么,以及为什么会抛出错误。有了这些信息,你应该能够解决这个问题(以及将来的类似问题!)。
在斯威夫特,你不能总是做这样的事情乘int型和浮动,或从一个Double类型的返回函数返回一个Int16的。对你来说,它可能是显而易见的,“铸造”变量到预期的类型就可以了 - 但编译器不知道。
如果你相信这将是安全的,可以“投”变量所需的类型:
Int(int16Variable) // int16Variable has been casted to an 'Int'.
线:array.append(i) 错误:无法将Int类型的值转换为预期的参数类型Int16 – redisky
method pow如何? – redisky
它很不清楚你想在这个功能中做什么。使用array.append(i)会将i添加到数组的末尾,如果数组为空且您将一个元素附加到它,它将是一个元素长,在下一行中,您使用值1进行下标,在第一次迭代是100,这将导致一个索引超出范围的错误 –