首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速转换会导致应用程序崩溃。

快速转换会导致应用程序崩溃。
EN

Stack Overflow用户
提问于 2015-12-25 00:09:43
回答 2查看 600关注 0票数 2

我最近的一个快速计划中出现了这个奇怪的错误。它涉及到随机事件,为了模拟这一点,我分配了一个事件‘概率’,然后生成两个随机数(使用这些概率),如果数字是相同的,那么动作就会发生。但是,这个程序在一代人中却莫名其妙地崩溃了。我唯一能想到的解释是过多的铸造要求,但我不知道为什么它只是偶尔崩溃。我很感激你对为什么选角失败的任何洞察力,以及如何避免这种过度的铸造的任何建议。

我的图像显示了代码和错误,下面的代码是我的代码的概括。碰撞误差

代码语言:javascript
复制
let rand = [Int(arc4random_uniform(UInt32(someInt))), Int(arc4random_uniform(UInt32(someInt)))]
if (rand[0] == rand[1]) {
    executeAction()
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-25 00:15:28

这是因为整数变量shootOdds在某一点上接受负值(或:不太可信,大于4,294,967,295的值),从而导致对无符号整数UInt32(someInt)进行转换的运行时错误。您可以避免这一点,方法是在let rand = ...行之前确保shootOdds >= 0 (或者在上面的代码示例中是someInt >= 0),或者您的数字不大于UInt32的上限。

因此,请注意,错误不与rand函数关联,特别是将负数转换为无符号整数。

例如,在操场上尝试以下示例,断言您获得了相同的运行时错误:

代码语言:javascript
复制
let a = -1
let b = UInt32(a)
票数 1
EN

Stack Overflow用户

发布于 2015-12-25 00:53:47

由于错误的代码,我的概率呈指数增长,最终太大,无法包含在UInt32中.由此产生的错误。谢谢你的帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34458997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档