【发布时间】:2014-06-10 03:32:50
【问题描述】:
所以我在这个代码位中的目标是随机掷两个骰子,我们都知道你的普通骰子只有 6 个面,所以我导入了 Foundation 以访问 arc4random_uniform(UInt32)。我尝试使用 (1..7) 的范围来避免随机获得 0,但是这返回了一个我不太喜欢的错误。我试着这样做:
dice1 = arc4random_uniform(UInt32(1..7))
但是返回了
找不到接受所提供参数的“init”的重载
我希望这些信息足以让你们这些优秀的德布斯帮助我:)
请注意,我只是在操场上这样做以练习 swift。我不必学习如何做到这一点。在我开始构建实际应用程序之前,我只是在修补:D
//imports random number function
import Foundation
//creates data storage for dice roll
var dice1: UInt32 = 0
var dice2: UInt32 = 0
//counter variable
var i = 0
//how many times snake eyes happens
var snakeeyes = 0
//how many times a double is rolled
var `double` = 0
//rolls dice 100 times
while i < 100{
//from here
//sets dice roll
这会返回一个错误'Range $T3' is not convertible to UInt32
dice1 = arc4random_uniform(1..7) dice2 = arc4random_uniform(1..7)
//checks for snake eyes
if dice1 == 1 && dice2 == 1 {
snakeeyes = snakeeyes + 1
}
//checks for doubles
if dice1 == dice2{
`double` = `double` + 1
}
//increases counter
i = i + 1
//to here
}
println("You got Snake Eyes \(snakeeyes) times.")
println("You got Doubles, \(`double`) times.")
【问题讨论】:
-
我相信你应该使用
dice1 = arc4random_uniform(6) + 1来获得 1 - 6 的范围。不过,我不会做 iOS 目标 C,也没有任何关于 swift 语言的知识。 random 方法应该返回 0 - 5,而 + 1 将是 1 - 6。 -
Range 本身是一个对象数据,它不是整数数据,这就是为什么当参数只包含 (UInt32) 时出现错误的原因 -
u_int32_t arc4random_uniform(u_int32_t upper_bound); -
啊哈!谢谢天空!做了一个断言来测试它是否小于 0,并且可以确认这正是我需要的,把它作为答案,这样我就可以检查它了!
-
probability = Int(arc4random_uniform(UInt32(total))) - 如果您有多个非特定的铸造投诉(因为预输入/标题不起作用)
-
这是从 Swift 4.2 开始内置的,如下所述stackoverflow.com/a/50696901/1148030
标签: range swift arc4random