func averageOf(numbers: Int...) -> Int { var sum = 0 var total = 0 var average = 0 for number in numbers { sum += number totaL++ } **Execution was interrupted,reason: EXC_BAD_INSTRUCTION (code=EXC_1386_INVOP,subcode=0x0)** average = sum/total return average}
我做错了什么(我需要学习什么才能正确行事)?
我猜你没有参数调用你的函数,即:averageOf()
这是可变参数允许的,数字将是一个空数组.这将导致您尝试将未更改的和除以未更改的总和(因为您将循环遍历循环,没有数字中没有元素),因此将0除以0,并且您将获得除零错误.
为了防止这种情况发生,您可以要求用户提供至少一个数字:
func averageOf(first: Int,rest: Int...) -> Double { var sum = first var total = 1.0 for number in rest { sum += number totaL++ } return Double(sum)/total}
这样,如果您尝试不带参数调用它,您将收到编译器错误.
顺便说一句,我改变了你的版本以返回一个Double而不是一个Int,你可能想要试验这两个版本来看看为什么.
(这种技术类似于声明标准的lib max函数,它至少需要2个参数:
func max<T : Comparable>(x: T,y: T) -> T
但是有3个或更多的重载版本:
func max<T : Comparable>(x: T,y: T,z: T,rest: T...) -> T
第一个版本的原因,而不是直接切换到至少需要两个版本的可变版本,然后你可以将它传递给像reduce这样的东西,以找到集合中的最大值,例如减少(a,max))
总结以上是内存溢出为你收集整理的关于Swift:执行被中断,原因:EXC_BAD_INSTRUCTION(代码= EXC_1386_INVOP,子代码= 0x0)全部内容,希望文章能够帮你解决关于Swift:执行被中断,原因:EXC_BAD_INSTRUCTION(代码= EXC_1386_INVOP,子代码= 0x0)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)