Swift错误,无法将Int类型转换为int 16

时间:2016-03-07 22:35:29

标签: ios swift

此函数将数字与此数字组件的多维数据集之和进行比较。例如,abc = a ^ 3 + b ^ 3 + c ^ 3。转换时出错,请帮忙。

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)

方法pow中的下一个错误&#39;无法使用Int16&#39;类型的参数列表调用pow。如果我理解正确,方法pow是^ 3

4 个答案:

答案 0 :(得分: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]

答案 1 :(得分:0)

您发布的方法有几个语法问题。我修好了他们。工作方法如下:

Lazy

您遇到的错误是关于从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

的投失

答案 2 :(得分:0)

我不是解决您的问题,而是解释问题所在,而为什么会抛出错误。有了这些信息,您应该能够解决问题(以及将来的类似问题!)。

在Swift中,你总是可以做一些事情,比如将Int与Float相乘,或者从Double类型返回函数返回Int16。对于您来说,显然将变量转换为预期类型可能会很好 - 但编译器并不知道

如果您确定它是安全的,您可以“投射”#39;变量到所需类型:

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

答案 3 :(得分:-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))