zoukankan      html  css  js  c++  java
  • Golang生成随机数案例实战

                     Golang生成随机数案例实战

                                     作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。 

    一.生成1个[0-99]的随机数案例

    package main
    
    import (
        "fmt"
        "math/rand"
        "time"
    )
    
    func main() {
    
        /*
            rand.Seed:
                还函数是用来创建随机数的种子,如果不执行该步骤创建的随机数是一样的,因为默认Go会使用一个固定常量值来作为随机种子。
    
            time.Now().UnixNano():
                当前操作系统时间的毫秒值
        */
        rand.Seed(time.Now().UnixNano())
    
        /*
            生成一个随机数
        */
        a := rand.Intn(100) //实际随机生成的数字范围[0,99]
        fmt.Printf("a的类型为[%T],a的随机数值为:[%d]
    ", a, a)
    }

    二.生成10个[200-500]的随机数案例

    package main
    
    import (
        "fmt"
        "math/rand"
        "time"
    )
    
    func main() {
    
        /*
            rand.Seed:
                还函数是用来创建随机数的种子,如果不执行该步骤创建的随机数是一样的,因为默认Go会使用一个固定常量值来作为随机种子。
    
            time.Now().UnixNano():
                当前操作系统时间的毫秒值
        */
        rand.Seed(time.Now().UnixNano())
    
        /*
            生成十个随机数[200-500]
        */
        for index := 1; index <= 10; index++ {
            random_number := rand.Intn(301) + 200
            fmt.Printf("第[%d]个随机数的值为:[%d]
    ", index, random_number)
        }
    }

    三.烧脑版生成随机数[需要指针知识]

    package main
    
    import (
        "fmt"
        "math/rand"
        "time"
    )
    
    func getRandomNumber(p *int, start_pos int, stop_pos int) {
        /*
            rand.Seed:
                还函数是用来创建随机数的种子,如果不执行该步骤创建的随机数是一样的,因为默认Go会使用一个固定常量值来作为随机种子。
    
            time.Now().UnixNano():
                当前操作系统时间的毫秒值
        */
        rand.Seed(time.Now().UnixNano())
    
        random_number := rand.Intn(stop_pos-start_pos) + start_pos
    
        /*
            将指针作为参数传递,形参间接修改实参的值
        */
        *p = random_number
    }
    
    func main() {
    
        /*
            定义要生成随机值的范围
        */
        var (
            start_pos int = 200
            stop_pos  int = 500
            num       int
        )
    
        for index := 1; index <= 10; index++ {
            /*
                每次循环时让CPU休息1毫秒,因为CPU执行太快,可能10此循环几乎在同一纳秒执行完毕。
    
                我暂时想到的解决方案有两种:
                    (1)以形参的方式传入随机种子值
                    (2)让主线程在不同的时间段调用函数
    
                上面两种思路均可,我为了省事情就直接让主线程休眠1毫秒,即采用了第二种解决方案。
            */
            time.Sleep(1)
    
            getRandomNumber(&num, start_pos, stop_pos)
            fmt.Printf("第[%d]个随机数的值为:[%d]
    ", index, num)
        }
    
    }

  • 相关阅读:
    Homework template (latex)
    Basic skill of searching
    国庆第三次集训: 2012 ACM-ICPC Asia Regional Contest Chengdu Site
    新学期随笔
    暑期集训感想
    暑期集训 DP 篇
    POJ 1195 Mobile Phones 二维树状数组
    51Nod1246 罐子和硬币,不能均分的题
    一维战舰,一道考区间的好题
    51NOD 1268 和为K的组合 搜索水题
  • 原文地址:https://www.cnblogs.com/yinzhengjie/p/12208030.html
Copyright © 2011-2022 走看看