zoukankan      html  css  js  c++  java
  • 【技术累积】【点】【java】【5】Random和shuffle()

    闲聊

    妈耶,又这么久没写了。。不过最近写其他文章有点多啊。。。

    今天用到Random这个类,竟然还要去查了下。。。


    基本概念

    Random类,背后是伪随机数(数学上的东西);

    不是很理解,但是基本上而言,就是生成个set(无序列表)

    本质是个seed的东西,根据这个的不同生成不同的Random类;

    默认的构造方法有两种:

    Random rand1 = new Random();
    
    Random rand2 = new Random(seed);
    

    第一种构造方式会按照代码自己的方式,尽量找一个独特的seed生成类;

    第二种构造方式会根据seed生成Random类;


    使用

    主要就是类中的各种数据类型的随机数的生成了;

    比如整数,double,long , boolean

    进而得到各种想要的数据范围,比如[1,3],就是rand.nextInt(4)

    具体解释可以看下:JAVA的Random类(转)

    关键点:

    • nextInt(n):得到[0,n)范围内的一个整数;
    • nextDouble():得到0-1之间的一个小数;

    自己测试下

    @Test
        public void testRandom(){
            Random random = new Random();
            LOGGER.info("double:"+String.valueOf(random.nextDouble()));
            LOGGER.info("boolean:"+String.valueOf(random.nextBoolean()));
            LOGGER.info("int:"+String.valueOf(random.nextInt()));
            LOGGER.info("long:"+String.valueOf(random.nextLong()));
    
            //0-1的小数
            LOGGER.info("0-1:"+String.valueOf(random.nextDouble()));
    
            //0-100的小数
            LOGGER.info("0-100:"+String.valueOf(random.nextDouble()*100));
    
            //-1到10的整数
            LOGGER.info("-1-10:"+String.valueOf((random.nextInt(12)-1)));
            LOGGER.info("-1-10:"+String.valueOf((random.nextInt(12)-1)));
            LOGGER.info("-1-10:"+String.valueOf((random.nextInt(12)-1)));
            LOGGER.info("-1-10:"+String.valueOf((random.nextInt(12)-1)));
            LOGGER.info("-1-10:"+String.valueOf((random.nextInt(12)-1)));
            LOGGER.info("-1-10:"+String.valueOf((random.nextInt(12)-1)));
            LOGGER.info("-1-10:"+String.valueOf((random.nextInt(12)-1)));
            LOGGER.info("-1-10:"+String.valueOf((random.nextInt(12)-1)));
    
            Random random1 = new Random(10);
            LOGGER.info("r1:"+String.valueOf((random1.nextInt(12)-1)));
            Random random2 = new Random(10);
            LOGGER.info("r2:"+String.valueOf((random2.nextInt(12)-1)));
    
            //看源码就是Random
            Math.random();
    
            // Collections.shuffle();
            // 源码
        }
    

    另外,如果seed是相同的,如上述代码最后一段,那么Random类中的set也是一样的,就可以控制随机。。伪随机。。。

    灵活应用中,我觉得最屌的是,固定中的随机:

    • 60%的概率是选项A;

    注意随机的是概率,范围是100!

    int n5 = r.nextInt(100);
    
            int m; //结果数字
    
            if (n5 < 55)
    
            { //55个数字的区间,55%的几率
    
                m = 1;
    
            } else if (n5 < 95)
    
            {//[55,95),40个数字的区间,40%的几率
    
                m = 2;
    
            } else
    
            {
    
                m = 3;
    
            }
            
    

    稍稍引申下

    刚好用到shuffle()函数

    Collections.shuffle(list);
    

    这个的基本操作是:

    • 循环list
    • 每次将当前位置对象,跟随机位置对象交换(swap)

    。。。

    然后,关于Math.random(),彻头彻尾就是封装了下rand.nextDouble()

  • 相关阅读:
    蓝牙4.0BLE抓包(二) – 广播包解析
    蓝牙4.0BLE抓包(一)
    蓝牙4.0 BLE 广播包解析
    蓝牙学习笔记之实例广播数据的解析
    Android ConstraintLayout详解
    Android ConstraintLayout的基本使用
    使用EasyBCD完美实现Windows7与Linux双系统
    使用MbrFix.exe修复MBR分区表
    C#中的Delegate
    C# 设置程序开机自动运行(+注册表项)
  • 原文地址:https://www.cnblogs.com/andy1202go/p/9508590.html
Copyright © 2011-2022 走看看