将Java Math.random转换为Swift 4

时间:2017-12-07 11:09:51

标签: java swift

我想知道如何将以下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)))

2 个答案:

答案 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)会返回一个随机的“索引”,而不是范围内的数字。可能他从变量的命名中推断出这一点。