【技术累积】【点】【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()
【技术累积】【点】【java】【5】Random和shuffle()的更多相关文章
- (转)如何学习Java技术?谈Java学习之路
51CTO编者注:这篇文章已经是有数年“网龄”的老文,不过在今天看来仍然经典.如何学习Java?本篇文章可以说也是面对编程初学者的一篇指导文章,其中对于如何学习Java的步骤的介绍,很多也适用于开发领 ...
- Protocol Buffer技术详解(Java实例)
Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发 ...
- Java API —— Random类
1.Random类概述 此类用于产生随机数 如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列. 2.构造 ...
- java.util.Random深入理解
java.util.Random next方法的原理 比较好的参考文档: http://isky001.iteye.com/blog/1339979 package random.utilrandom ...
- [转] JAVA的Random类
Random类 (java.util) Random类中实现的随机算法是伪随机,也就是有规则的随机.在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要 ...
- java java.uitl.Random产生随机数
通过使用java.uitl.Random产生一个1-10内的随机数.例: Random random = new Random(); int i = Math.abs(random.nextInt() ...
- java.util.Random 类的 nextInt(int num )
随机产生3个67~295的整数并找出数值居中的数 并输出中间的数例如:100,225和200,输出200 要随机产生某个范围内的整数,用 java.util.Random 类的 nextInt(int ...
- Java基础-Random类(05)
随机数(Random) 作用:用于产生一个随机数 使用步骤(和Scanner类似) 导包import java.util.Random; 创建对象Random r = new Random(); 获取 ...
- 【java】彩票中奖码生成器:java.util.Random里的方法public int nextInt(int bound)
package 彩票中奖码生成器; import java.util.Random; public class TestRandom { public static void main(String[ ...
随机推荐
- Linux基础:find命令总结
本文只总结一些常用的用法,更详细的说明见man find和 info find. find命令 find命令常用来查找文件或目录,可以根据给定的路径和表达式查找所需的文件或目录.该工具是由findut ...
- python3使用465端口发送邮件来解决阿里云封闭25端口问题
import smtplibfrom email.mime.text import MIMETextfrom email.utils import formataddr #发件人邮箱账号my_send ...
- SpringBoot快速创建HelloWorld项目
废话不多提,拿起键盘,打开 IDEA 就是一通骚操作. 打开 IDEA 后,首页选择 Create New Project,再接着按下图所示,快速搭建SpringBoot项目. 接下来将 Group ...
- ldap 禁止匿名登录(5)
[root@zabbix1 ~]# cat disable_anon.ldif dn: cn=config changetype: modify add: olcDisallows olcDisall ...
- 21.实验基于_version进行乐观锁并发控制
21.实验基于_version进行乐观锁并发控制 主要知识点: 实验基于_version进行乐观锁并发控制 1.实验实战演练基于_version进行乐观锁并发控制 (1)先构造一条数据出来 PUT / ...
- H5-video1 iOS苹果和微信中音频和视频实现自动播放的方法
<audio preload="preload" controls id="car_audio" src="http://media.xitao ...
- 6.在idea中链接数据库
1.打开数据库配置的窗口 File - view - Tool Windows - Database 2.打开mysql的数据库链接模板 Database - + - Data Source - M ...
- fzoj 2113数位dp
参考http://blog.csdn.net/xingyeyongheng/article/details/8785785 #include<stdio.h> #define ll lon ...
- Tyvj - 1286 - 校门外的树2
描述 Description 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1 ...
- jQuery Mobile中$.mobile.buttonMarkup方法使用具体解释
近期在群里遇到多数网友提到$.mobile.buttonMarkup()方法的使用. 我这里就列了一下api的使用说明,以后大家看博客就能解决这个问题.如有不对的地方,请留言指出! jQuery Mo ...