gpt4 book ai didi

random - Swift rand() 不是随机的

转载 作者:搜寻专家 更新时间:2023-10-31 08:11:03 25 4
gpt4 key购买 nike

今天是我使用 Swift 的第一天,我遇到了一个问题。我正在使用 rand 生成一个随机数,但每次运行代码时它都会给我相同的结果。

main.swift:

import Foundation

var player = Player()

for _ in 1..6 {
println(player.kick())
}

播放器.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 - 它是一个更好的生成器。如果您查看它的手册页,您会发现它有一个称为 arc4random_uniform() 的整数范围生成器形式,当模数不是 2 的幂时,您应该使用它来避免模数偏差。我相信以下是您想要的,它在 Playground 上对我有用:

let damage = arc4random_uniform(UInt32(range.1 - range.0) + 1) + UInt32(range.0)

+ 1是因为arc4random_uniform()的上端不包含。如果您的范围是 (4,7),这应该会出现 4、5、6 和 7。

关于random - Swift rand() 不是随机的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24441520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com