为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁星淼淼 2019-09-20 17:31:06
所以我在这个代码中的目标是随机滚动两个骰子,因为我们都知道你的常规骰子只有6个边,所以我导入了Foundation来访问arc4random_uniform(UInt32)。我试图使用(1..7)的范围来避免随机获得0,但是返回了一个我不太喜欢的错误。我试着这样做:dice1 = arc4random_uniform(UInt32(1..7))然而那又归来了找不到接受提供的参数的'init'的重载我希望这是足够的信息,你在那里惊人的debs帮助我:)请注意我只是在操场上练习快速练习。我不必学习如何做到这一点; 在我开始构建实际的应用程序之前,我只是在修补:D//imports random number functionimport Foundation//creates data storage for dice rollvar dice1: UInt32 = 0var dice2: UInt32 = 0//counter variablevar i = 0//how many times snake eyes happensvar snakeeyes = 0 //how many times a double is rolledvar `double` = 0//rolls dice 100 timeswhile 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.")
查看完整描述

3 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

我做了一个Int类型的扩展。在操场上测试它,希望这是有用的。它还接受负范围:


extension Int

{

    static func random(range: Range<Int> ) -> Int

    {

        var offset = 0


        if range.startIndex < 0   // allow negative ranges

        {

            offset = abs(range.startIndex)

        }


        let mini = UInt32(range.startIndex + offset)

        let maxi = UInt32(range.endIndex   + offset)


        return Int(mini + arc4random_uniform(maxi - mini)) - offset

    }

}

用得像


var aRandomInt = Int.random(-500...100)  // returns a random number within the given range.

或者将它定义为Range扩展名,如下所示:


extension Range

{

    var randomInt: Int

    {

        get

        {

            var offset = 0


            if (startIndex as Int) < 0   // allow negative ranges

            {

                offset = abs(startIndex as Int)

            }


            let mini = UInt32(startIndex as Int + offset)

            let maxi = UInt32(endIndex   as Int + offset)


            return Int(mini + arc4random_uniform(maxi - mini)) - offset

        }

    }

}


// usage example: get an Int within the given Range:

let nr = (-1000 ... 1100).randomInt


查看完整回答
反对 回复 2019-09-20
  • 3 回答
  • 0 关注
  • 849 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信