如何在arc4random_uniform()的范围之间创建随机数?

所以我在这个代码中的目标是随机滚动两个骰子,因为我们都知道你的常规骰子只有6个边,所以我导入了Foundation来访问arc4random_uniform(UInt32)。我试图使用(1..7)的范围来避免随机获得0,但是返回了一个我不太喜欢的错误。我试着这样做:


dice1 = arc4random_uniform(UInt32(1..7))

然而那又归来了


找不到接受提供的参数的'init'的重载


我希望这是足够的信息,你在那里惊人的debs帮助我:)


请注意我只是在操场上练习快速练习。我不必学习如何做到这一点; 在我开始构建实际的应用程序之前,我只是在修补:D


//imports random number function

import Foundation

//creates data storage for dice roll

var dice1: UInt32 = 0

var dice2: UInt32 = 0

//counter variable

var i = 0

//how many times snake eyes happens

var snakeeyes = 0

 //how many times a double is rolled

var `double` = 0

//rolls dice 100 times

while i < 100{

    //from here

    //sets dice roll

这将返回错误“Range $ T3”无法转换为UInt32


   dice1 = arc4random_uniform(1..7)

   dice2 = arc4random_uniform(1..7)

    //checks for snake eyes

    if dice1 == 1 && dice2 == 1 {

        snakeeyes = snakeeyes + 1


    }

    //checks for doubles

    if dice1 == dice2{

        `double` = `double` + 1

    }

    //increases counter

        i = i + 1

    //to here

}

println("You got Snake Eyes \(snakeeyes) times.")

println("You got Doubles, \(`double`) times.")


繁星淼淼
浏览 810回答 3
3回答

慕桂英546537

我做了一个Int类型的扩展。在操场上测试它,希望这是有用的。它还接受负范围:extension Int{&nbsp; &nbsp; static func random(range: Range<Int> ) -> Int&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; var offset = 0&nbsp; &nbsp; &nbsp; &nbsp; if range.startIndex < 0&nbsp; &nbsp;// allow negative ranges&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; offset = abs(range.startIndex)&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; let mini = UInt32(range.startIndex + offset)&nbsp; &nbsp; &nbsp; &nbsp; let maxi = UInt32(range.endIndex&nbsp; &nbsp;+ offset)&nbsp; &nbsp; &nbsp; &nbsp; return Int(mini + arc4random_uniform(maxi - mini)) - offset&nbsp; &nbsp; }}用得像var aRandomInt = Int.random(-500...100)&nbsp; // returns a random number within the given range.或者将它定义为Range扩展名,如下所示:extension Range{&nbsp; &nbsp; var randomInt: Int&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; get&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var offset = 0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (startIndex as Int) < 0&nbsp; &nbsp;// allow negative ranges&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; offset = abs(startIndex as Int)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let mini = UInt32(startIndex as Int + offset)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let maxi = UInt32(endIndex&nbsp; &nbsp;as Int + offset)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return Int(mini + arc4random_uniform(maxi - mini)) - offset&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}// usage example: get an Int within the given Range:let nr = (-1000 ... 1100).randomInt
打开App,查看更多内容
随时随地看视频慕课网APP