Ios Swift中的随机数

Ios Swift中的随机数,ios,swift,Ios,Swift,我想创建随机数,显示在应用程序前面的5个UIImage框中。然而,我希望这些数字不总是在同一范围内。例如,我下面的代码显示0。。。9表示randomPoolBallIndex3。但是,我希望它显示0中的任何数字。。。49,但不能在其他索引上重复相同的数字。所以每次按下按钮都不会显示,比如说1,1,34,35和50,但是每个数字都会不同 有办法做到这一点吗 我将数组从0分解。。。每一个randomPoolBallIndex都有49个,但现在它们只显示我设置的范围,我并不完全满意,因为它解决了重复问

我想创建随机数,显示在应用程序前面的5个UIImage框中。然而,我希望这些数字不总是在同一范围内。例如,我下面的代码显示0。。。9表示
randomPoolBallIndex3
。但是,我希望它显示0中的任何数字。。。49,但不能在其他索引上重复相同的数字。所以每次按下按钮都不会显示,比如说1,1,34,35和50,但是每个数字都会不同

有办法做到这一点吗

我将数组从0分解。。。每一个randomPoolBallIndex都有49个,但现在它们只显示我设置的范围,我并不完全满意,因为它解决了重复问题

代码如下:

let ballArray = ["poolball1","poolball2","poolball3","poolball4","poolball5","poolball6","poolball7","poolball8","poolball9","poolball10","poolball11","poolball12","poolball13","poolball14","poolball15","poolball16","poolball17","poolball18","poolball19","poolball20","poolball21","poolball22","poolball23","poolball24","poolball25","poolball26","poolball27","poolball28","poolball29","poolball30","poolball31","poolball32","poolball33","poolball34","poolball35","poolball36","poolball37","poolball38","poolball39","poolball40","poolball41","poolball42","poolball43","poolball44","poolball45","poolball46","poolball47","poolball48","poolball49","poolball50"]

var randomPoolBallIndex: Int = 0
var randomPoolBallIndex1: Int = 0
var randomPoolBallIndex2: Int = 0
var randomPoolBallIndex3: Int = 0
var randomPoolBallIndex4: Int = 0
var randomPoolBallIndex5: Int = 0

@IBOutlet weak var poolBallView1: UIImageView!
@IBOutlet weak var poolBallView2: UIImageView!
@IBOutlet weak var poolBallView3: UIImageView!
@IBOutlet weak var poolBallView4: UIImageView!
@IBOutlet weak var poolBallView5: UIImageView!

@IBAction func buttonPressed(_ sender: UIButton) {
    randomPoolBallIndex1 = Int.random(in: 20 ... 29)
    randomPoolBallIndex2 = Int.random(in: 40 ... 49)
    randomPoolBallIndex3 = Int.random(in: 0 ... 9)
    randomPoolBallIndex4 = Int.random(in: 30 ... 39)
    randomPoolBallIndex5 = Int.random(in: 10 ... 19)

    poolBallView1.image = UIImage(named: ballArray[randomPoolBallIndex1])
    poolBallView2.image = UIImage(named: ballArray[randomPoolBallIndex2])
    poolBallView3.image = UIImage(named: ballArray[randomPoolBallIndex3])
    poolBallView4.image = UIImage(named: ballArray[randomPoolBallIndex4])
    poolBallView5.image = UIImage(named: ballArray[randomPoolBallIndex5])
使用洗牌 我想你只需要从你的巴拉里随机得到5个不同的台球名称。所以你不需要生成任何随机数。仅在按下按钮时,从无序排列的ballArray创建一个常量

let shuffledBallArray = ballArray.shuffled()
现在只需设置如下图像:

poolBallView1.image = UIImage(named: shuffledBallArray[0])
poolBallView2.image = UIImage(named: shuffledBallArray[1])
...
@IBAction func buttonPressed(_ sender: UIButton) {

    let shuffledBallArray = ballArray.shuffled()

    poolBallView1.image = UIImage(named: shuffledBallArray[0])
    poolBallView2.image = UIImage(named: shuffledBallArray[1])
    poolBallView3.image = UIImage(named: shuffledBallArray[2])
    poolBallView4.image = UIImage(named: shuffledBallArray[3])
    poolBallView5.image = UIImage(named: shuffledBallArray[4])
}
因此,按下
按钮的操作应该如下所示:

poolBallView1.image = UIImage(named: shuffledBallArray[0])
poolBallView2.image = UIImage(named: shuffledBallArray[1])
...
@IBAction func buttonPressed(_ sender: UIButton) {

    let shuffledBallArray = ballArray.shuffled()

    poolBallView1.image = UIImage(named: shuffledBallArray[0])
    poolBallView2.image = UIImage(named: shuffledBallArray[1])
    poolBallView3.image = UIImage(named: shuffledBallArray[2])
    poolBallView4.image = UIImage(named: shuffledBallArray[3])
    poolBallView5.image = UIImage(named: shuffledBallArray[4])
}
创建唯一的随机数 或者,您可以创建一个函数,该函数为您提供5个唯一的随机数

func generateNumbers(repetitions: Int, maxValue: Int) -> [Int] {

    var numbers = [Int]()

    for _ in 1...repetitions {
        var n: Int
        repeat {
            n = Int.random(in: 1...maxValue)
        } while numbers.contains(n)
        numbers.append(n)
    }

    return numbers
}
在按下的按钮中,只需为这个随机数数组创建常量并设置图像,而无需将任何图像名称保存在ballArray中的某个位置,并使用硬编码的50个名称

@IBAction func buttonPressed(_ sender: UIButton) {

    let randomNumbers = generateNumbers(repetitions: 5, maxValue: 50)

    poolBallView1.image = UIImage(named: "poolBall\(randomNumbers[0])")
    poolBallView2.image = UIImage(named: "poolBall\(randomNumbers[1])")
    poolBallView3.image = UIImage(named: "poolBall\(randomNumbers[2])")
    poolBallView4.image = UIImage(named: "poolBall\(randomNumbers[3])")
    poolBallView5.image = UIImage(named: "poolBall\(randomNumbers[4])")
}

创建一个数组。它们允许存储大量数据,您可以引用所有数据。同样适用于图像

var randomPoolBallIndices:[Int]!
@IBOutlet weak var poolBallViews: [UIImageView]! //Look up how to make array from IBOutlets

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    randomPoolBallIndices = Array(repeating: 0, count: 5)
}

@IBAction func buttonPressed(_ sender: UIButton) {

    for index in randomPoolBallIndices.indices {
        let number = Int.random(in: 0 ... 49)
        while (randomPoolBallIndices.contains(number)) {
            number = Int.random(in: 0 ... 49)
        }
        randomPoolBallIndices[index] = number
        poolBallViews[index] = randomPoolBallIndices[index]
    }
}

生成随机数并将其插入集合。当设置计数达到5时,中断循环。这样可以避免重复。然后从集合中创建随机数数组

看看
var ballArray=ballArray;random1=Int.random(在0…ballArray2.count中),view1=UIImage(命名为:ballArray2[random1]);ballArray.remove(at:random1),random2=Int.random(in:0…ballArray2.count)等等。?不确定限制,可能是ballArray2.count-1I与此解决方案类似,另一个选项是使用带有最后选择的值的数组属性和一个函数,该函数可以检查是否已选择该数字以获取另一个值。将集合洗牌到位。用它代替。嗨,罗伯特,你给我的第一个答案似乎很有效,我的假设是对的,我不会看到重复的数字,比如两个1或两个49,或者其他任何东西被显示出来?先生,你已经赢得了一个勾号,非常感谢你的助手。这是我学习Swift和编程的一般经验。再次感谢