Swift rand()不是随机的
发布时间:2020-12-14 04:52:18 所属栏目:百科 来源:网络整理
导读:今天是我与 Swift的第一天,我遇到了一个问题.我使用rand生成一个随机数,但每次运行代码时它都会给我相同的结果. main.swift: import Foundationvar player = Player()for _ in 1..6 { println(player.kick())} player.swift: import Foundationclass Playe
今天是我与
Swift的第一天,我遇到了一个问题.我使用rand生成一个随机数,但每次运行代码时它都会给我相同的结果.
main.swift: import Foundation var player = Player() for _ in 1..6 { println(player.kick()) } player.swift: import Foundation class Player { var health = 25 var xp = 15 var upgrades = ["kick": 0,"punch": 0] func kick() -> Int { let range = (3,7) let damage = Int(rand()) % (range.1 - range.0) + range.0 + 1 return damage } func punch() -> Int { let range = (4,6) let damage = Int(rand()) % (range.1 - range.0) + range.0 + 1 return damage } } 每次运行代码时,都会记录这些数字: 7 5 5 6 6 我也试过这个:Int(arc4random(range.1 – range.0))range.0 1但它说它找不到接受提供的参数的重载 我不知道为什么会发生这种情况.我很感激一些帮助,谢谢! 解决方法
你永远不应该使用rand(),使用arc4random – 它是一个更好的生成器.如果你检查它的man-pages,你会发现它有一个名为arc4random_uniform()的整数范围生成器形式,当模数不是2的幂时你应该使用它来避免模偏差.我相信以下就是你的想要,它在操场上对我有用:
let damage = arc4random_uniform(UInt32(range.1 - range.0) + 1) + UInt32(range.0) 1是因为arc4random_uniform()的上端是非包含的.如果您的范围是(4,7),则应该出现4,5,6和7. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |