我想知道如何将以下java代码转换为Swift 4。
int randomNoteIndex = myArray[0] + (int) (Math.random() * (myArray[1] - myArray[0] + 1));
这是我尝试过但我每次都得到相同的号码myArray [0]
let randomNoteIndex = myArray[0] + Int(arc4random_uniform(1) * (UInt32(myArray[1]) - UInt32(myArray[0]) + UInt32(1)))
答案 0 :(得分:0)
arc4random_uniform
返回介于0和-1之间传递的参数之间的随机值。因此,如果你传入1,你只会得到0。
您可以通过传入数组计数来实现所需的行为。例如:
let randomIndex = Int(arc4random_uniform(Int32(myArray.count)))
注意强制转换,这是因为arc4random_uniform
是C派生的,因此需要显式输入。
答案 1 :(得分:0)
lowerBound + (int) (Math.random() * (upperBound - lowerBound + 1))
返回范围为[lowerBound, upperBound]
的均匀分布的随机数。
arc4random_uniform(upperBound)
返回小于upperBound
的均匀分布的随机数。所以你要问的应该是:
lowerBound + arc4random_uniform(upperBound - lowerBound + 1)
正如Jacob所说,arc4random_uniform(myArray.count)
会返回一个随机的“索引”,而不是范围内的数字。可能他从变量的命名中推断出这一点。