【技术累积】【点】【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[ ...
随机推荐
- Vue学习之路第二十篇:Vue生命周期函数-组件创建期间的4个钩子函数
1.每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听.编译模板.将实例挂载到 DOM 并在数据变化时更新 DOM 等.同时在这个过程中也会运行一些叫做生命周期钩子的函数 ...
- python中字节与字符串的转换
#bytes object byte = b"byte example" # str object str = "str example" ...
- 07.网络编程-3.TCP
1.tcp相关介绍 TCP协议,传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC ...
- PHP socket初探 --- 关于IO的一些枯燥理论
[原文地址:https://blog.ti-node.com/blog...] 要想更好了解socket编程,有一个不可绕过的环节就是IO.在Linux中,一切皆文件.实际上要文件干啥?不就是读写么? ...
- C#学习笔记_05_输入输出
05_输入输出 输出语句 Console.WriteLine( ); 将括号内内容输出到控制台,并且换行 Console.Write( ); 将括号内内容输出到控制台,不换行 Console.Writ ...
- hdu 1713求分数的最小公倍数
题意中的圈数和天数说反了 #include<stdio.h> __int64 gcd(__int64 a,__int64 b) {/* 比如4/3 3/5 通分20/15 9/15 所以这 ...
- HDU - 1723 - Distribute Message
先上题目: Distribute Message Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java ...
- 【ACM】poj_2080_Calendar_201307311043
CalendarTime Limit: 1000MS Memory Limit: 30000K Total Submissions: 9787 Accepted: 3677 Description ...
- 【ACM】hdu_1092_A+BIV_201307261630
A+B for Input-Output Practice (IV)Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/3276 ...
- HDU 4512 最长公共上升子序列
各种序列复习: (1)最长上升子序列. 1.这个问题用动态规划就很好解决了,设dp[i]是以第i个数字结尾的上升子序列的最长长度.那么方程可以是dp[i]=max(dp[j]+1).(j<i). ...