2016-03-07 107 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'.