我如何生成仅显示一次的随机数? [重复]

问题描述 投票:-1回答:2

我正在尝试在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)将再次重新生成。

arrays swift random
2个回答
1
投票

这里您应该做的是洗净数组,然后取头三个结果。

let randomFruits = fruits.shuffled()[...2]

RandomFruits现在是从水果数组中获取的三个随机字符串的数组切片。

现在只显示它们。


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] = ““ 

之前

© www.soinside.com 2019 - 2024. All rights reserved.