闲聊

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

今天用到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. 43.mapping的理解

    主要知识点: mapping的理解     (1)往es里面直接插入数据,es会自动建立索引,同时建立type以及对应的mapping (2)mapping中就自动定义了每个field的数据类型. ( ...

  2. 《奋斗吧!菜鸟》 第八次作业:Alpha冲刺 Scrum meeting 5

    项目 内容 这个作业属于哪个课程 任课教师链接 作业要求 https://www.cnblogs.com/nwnu-daizh/p/11012922.html 团队名称 奋斗吧!菜鸟 作业学习目标 A ...

  3. 提高生产力:文件和IO操作(ApacheCommonsIO-汉化分享)

    复制.移动.删除.比较.监控.文件读写 等文件和IO操作是编程中比较常用的功能.        幸运的是,Apache Commons IO等开源组件已经帮我们实现了.        我们可以不用重复 ...

  4. php 微擎

    pdo_insert('ewei_shop_member', $data); $my = array('agentid' => '4102'); // pdo_update(表明,'修改的值', ...

  5. 【Codeforces 229B】Planets

    [链接] 我是链接,点我呀:) [题意] [题解] 设dis[i]表示到达i号传送器的最早时刻. 显然,虽然有那么多的出发时刻的限制,但我们还是越早到越好的. 因为你到得越早,出发的时间肯定不会比到达 ...

  6. App后台开发运维和架构实践学习总结(1)——App后台核心技术之用户验证方案

    对于初学者来说,对Token和Session的使用难免会限于困境,开发过程中知道有这个东西,但却不知道为什么要用他?更不知道其原理,今天我就带大家一起分析分析这东西. 一.使用Token进行身份鉴权 ...

  7. myquant平台搭建及使用

    1.主页 http://myquant.cn/ 点击“我要申请试用”,进入如下页面:http://myquant.cn/news/2015/03/25/try-gmsdk-v2.0/ 点击“试用注册” ...

  8. EXTJS之DATA PROXY READER

    这是不依赖于STORE的读取.我测试了很久,原来在新版本的EXTJS里.modelmanager.getmodel之类的不用了. 更改为静态的LOAD办法. <!DOCTYPE html> ...

  9. POJ 2029

    二维树状数组可解此题 #include <iostream> #include <cstdio> #include <cstring> #include <a ...

  10. jQuery实现轮播效果(一) - 基础

    前戏: XXXX年XX月XX日,经理交给我一个站点新闻资讯网页开发的活儿.我一个java程序猿,怎么完毕得了网页设计这样高端的活儿呢! 之前尽管有学过一点HTML.CSS的知识.可是在实际的使用中,把 ...