闲聊

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

今天用到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()

【技术累积】【点】【java】【5】Random和shuffle()的更多相关文章

  1. (转)如何学习Java技术?谈Java学习之路

    51CTO编者注:这篇文章已经是有数年“网龄”的老文,不过在今天看来仍然经典.如何学习Java?本篇文章可以说也是面对编程初学者的一篇指导文章,其中对于如何学习Java的步骤的介绍,很多也适用于开发领 ...

  2. Protocol Buffer技术详解(Java实例)

    Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发 ...

  3. Java API —— Random类

    1.Random类概述         此类用于产生随机数         如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列. 2.构造 ...

  4. java.util.Random深入理解

    java.util.Random next方法的原理 比较好的参考文档: http://isky001.iteye.com/blog/1339979 package random.utilrandom ...

  5. [转] JAVA的Random类

    Random类 (java.util) Random类中实现的随机算法是伪随机,也就是有规则的随机.在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要 ...

  6. java java.uitl.Random产生随机数

    通过使用java.uitl.Random产生一个1-10内的随机数.例: Random random = new Random(); int i = Math.abs(random.nextInt() ...

  7. java.util.Random 类的 nextInt(int num )

    随机产生3个67~295的整数并找出数值居中的数 并输出中间的数例如:100,225和200,输出200 要随机产生某个范围内的整数,用 java.util.Random 类的 nextInt(int ...

  8. Java基础-Random类(05)

    随机数(Random) 作用:用于产生一个随机数 使用步骤(和Scanner类似) 导包import java.util.Random; 创建对象Random r = new Random(); 获取 ...

  9. 【java】彩票中奖码生成器:java.util.Random里的方法public int nextInt(int bound)

    package 彩票中奖码生成器; import java.util.Random; public class TestRandom { public static void main(String[ ...

随机推荐

  1. Linux基础:find命令总结

    本文只总结一些常用的用法,更详细的说明见man find和 info find. find命令 find命令常用来查找文件或目录,可以根据给定的路径和表达式查找所需的文件或目录.该工具是由findut ...

  2. python3使用465端口发送邮件来解决阿里云封闭25端口问题

    import smtplibfrom email.mime.text import MIMETextfrom email.utils import formataddr #发件人邮箱账号my_send ...

  3. SpringBoot快速创建HelloWorld项目

    废话不多提,拿起键盘,打开 IDEA 就是一通骚操作. 打开 IDEA 后,首页选择 Create New Project,再接着按下图所示,快速搭建SpringBoot项目. 接下来将 Group ...

  4. ldap 禁止匿名登录(5)

    [root@zabbix1 ~]# cat disable_anon.ldif dn: cn=config changetype: modify add: olcDisallows olcDisall ...

  5. 21.实验基于_version进行乐观锁并发控制

    21.实验基于_version进行乐观锁并发控制 主要知识点: 实验基于_version进行乐观锁并发控制 1.实验实战演练基于_version进行乐观锁并发控制 (1)先构造一条数据出来 PUT / ...

  6. H5-video1 iOS苹果和微信中音频和视频实现自动播放的方法

    <audio preload="preload" controls id="car_audio" src="http://media.xitao ...

  7. 6.在idea中链接数据库

    1.打开数据库配置的窗口 File - view  - Tool Windows - Database 2.打开mysql的数据库链接模板 Database - + - Data Source - M ...

  8. fzoj 2113数位dp

    参考http://blog.csdn.net/xingyeyongheng/article/details/8785785 #include<stdio.h> #define ll lon ...

  9. Tyvj - 1286 - 校门外的树2

    描述 Description 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1 ...

  10. jQuery Mobile中$.mobile.buttonMarkup方法使用具体解释

    近期在群里遇到多数网友提到$.mobile.buttonMarkup()方法的使用. 我这里就列了一下api的使用说明,以后大家看博客就能解决这个问题.如有不对的地方,请留言指出! jQuery Mo ...