我正在尝试在0-4之间最多生成5个数字,并且不会多次重复生成相同的数字。该程序将在尝试3次后停止,因此生成的随机数应为4,3,2,而不是4,3,4(例如)。
我创建了一个包含5个字符串元素的数组。单击按钮3次后,数组中的至少3个字符串将显示在标签上。单击按钮3次后,该应用程序将结束。但是,问题是每次单击按钮时,数组中的某些字符串都会不断重复自身。 我发现了一种防止数字重复的方法,例如,避免重复(1,3,1)而不是(1,1,3)。但就我而言,我不希望数字一旦生成就生成。例如。 (1,3,4)而不是(1,3,1)来重新生成(1)。
var fruits: [String] = ["Apple", "Mango", "Cherry", "Strawberry", "Blueberry", "Banana"] // fruits to be displayed in the label
func randomizeNum() -> UInt32 {
var randomNumber = arc4random_uniform(UInt32(fruits.count))
while previousNumber == randomNumber {
randomNumber = arc4random_uniform(UInt32(fruits.count))
}
displayLbl.text = fruits[Int(randomNumber)]
previousNumber = randomNumber
print("the random num is \(randomNumber)") // This prints for example 5, 1, 5. Need it to print only numbers that's not yet displayed with 3 attempts.
return randomNumber
}
我希望此函数的输出生成一个随机数,例如0,4,1,但它会生成5,1,5或0,4,0,其中(0)将再次重新生成。
答案 0 :(得分:5)
您应该在这里进行洗牌,然后取出前三个结果。
let randomFruits = fruits.shuffled()[...2]
RandomFruits现在是从水果数组中提取的三个随机字符串的数组切片。
现在只显示它们。
答案 1 :(得分:0)
相反
while previousNumber == randomNumber {
randomNumber = arc4random_uniform(UInt32(fruits.count))
}
displayLbl.text = fruits[Int(randomNumber)]
previousNumber = randomNumber
尝试
while previousNumbers.contains(randomNumber) {
randomNumber = arc4random_uniform(UInt32(fruits.count))
}
previousNumbers.append(randomNumber)
声明
var previousNumbers : [UInt32] = ""
之前