Random类和Math.random()方法
一、Random类的定义
Random类位于 java.util 包中,主要用于生成伪 随机数
Random类将 种子数 作为随机算法的起源数字,计算生成伪随机数,其与生成的随机数字的区间无关
创建Random实例时,若没有指定种子数,则会以 当前时间 作为种子数,来计算生成伪随机数
拥有 相同种子 的Random实例,在相同次数下,生成的伪随机数完全相同
Random random1 = new Random(10);
Random random2 = new Random(10);
System.out.println(random1.nextInt()); // -1157793070
System.out.println(random2.nextInt()); // -1157793070
Random r = new Random(); r.nextInt(101); random的nextInt(int n)方法可以生成一个介于0(包含)到n(不包含)之间的整数 nextInt(101)生成的就是0~100之间的随机数,包含0和100
使用Random类产生5个1~30的随机整数
import java.util.Arrays;
import java.util.Random;
//使用Random类产生5个1~30的随机整数
public class Test2 {
public static void main(String[] args){
Random r=new Random();
int[] arr=new int[5];
//赋值
for(int i=0;i<arr.length;i++){
//1~30
arr[i]=r.nextInt(30)+1;
}
System.out.println(Arrays.toString(arr));
}
}
.使用随机数0和1来模拟抛硬币实验,统计抛出1000次后正反面出现的次数并输出,正面为1,反面为0
import java.util.Random;
//使用随机数0和1来模拟抛硬币实验,统计抛出1000次后正反面出现的次数并输出
//正面为1,反面为0
public class Test4 {
public static void main(String[] args){
Random r=new Random();
int countPostive=0;
int countNegtive=0;
for(int i=0;i<1000;i++){
//产0或1
int a=r.nextInt(2);
if(a==0){
countNegtive++;
}
if(a==1){
countPostive++;
}
}
System.out.println("1出现的次数:"+countPostive+",0出现的次数:"+countNegtive);
}
}
二、Random类的常用方法
1、random.nextBoolean()
用于从该随机数生成器的序列中得到下一个伪均匀分布的boolean值
Random random = new Random();
System.out.println(random.nextBoolean());
2、random.nextBytes()
用于生成随机字节并将其放入用户提供的byte数组中
Random random = new Random();
byte[] data = new byte[30];
random.nextBytes(data);
System.out.println(Arrays.toString(data));
3、random.nextDouble()
用于从该随机数生成器的序列中得到下一个伪均匀分布在0.0到1.0之间的double值,[0.0, 1.0)
Random random = new Random();
System.out.println(random.nextDouble());
4、random.nextFloat()
用于从该随机数生成器的序列中得到下一个伪均匀分布在0.0到1.0之间的float值,[0.0, 1.0)
Random random = new Random();
System.out.println(random.nextFloat());
5、random.nextInt()
random.nextInt()
用于从该随机数生成器的序列中得到下一个伪均匀分布的int值
Random random = new Random();
System.out.println(random.nextInt());
random.nextInt(int bound)
用于从该随机数生成器的序列中得到下一个0到结束值之间伪均匀分布的int值,[0, 结束值)
Random random = new Random();
System.out.println(random.nextInt(10));
6、random.nextGaussian()
用于从该随机数生成器的序列中得到下一个伪均匀分布的double值
生成的double值符合均值为0,方差为1的正态分布(高斯分布)
Random random = new Random();
System.out.println(random.nextGaussian());
7、random.setSeed(long seed)
设置随机种子
Random random = new Random();
random.setSeed(10);
8、random.ints()
random.ints()
用于得到一个有效无限的伪随机int值流
IntStream ints = random.ints();
ints.forEach(System.out::println);
random.ints(long streamSize)
用于得到一个有限长度的伪随机int值流
IntStream ints = random.ints(10);
ints.forEach(System.out::println);
random.ints(int randomNumberOrigin, int randomNumberBound)
用于得到一个有效无限的范围在起始值到结束值之间的伪随机int值流,[起始值, 结束值)
IntStream ints = random.ints(1, 10);
ints.forEach(System.out::println);
random.ints(long streamSize, int randomNumberOrigin, int randomNumberBound)
用于得到一个有限长度的范围在起始值到结束值之间的伪随机int值流,[起始值, 结束值)
IntStream ints = random.ints(10, 1, 10);
ints.forEach(System.out::println);
9、random.longs()
random.longs()
用于得到一个有效无限的伪随机long值流
LongStream longs = random.longs();
longs.forEach(System.out::println);
random.longs(long streamSize)
用于得到一个有限长度的伪随机long值流
LongStream longs = random.longs(10);
longs.forEach(System.out::println);
random.longs(int randomNumberOrigin, int randomNumberBound)
用于得到一个有效无限的范围在起始值到结束值之间的伪随机long值流,[起始值, 结束值)
LongStream longs = random.longs(1, 10);
longs.forEach(System.out::println);
random.longs(long streamSize, int randomNumberOrigin, int randomNumberBound)
用于得到一个有限长度的范围在起始值到结束值之间的伪随机long值流,[起始值, 结束值)
LongStream longs = random.longs(10, 1, 10);
longs.forEach(System.out::println);
10、random.doubles()
random.doubles()
用于得到一个有效无限的伪随机double值流
DoubleStream doubles = random.doubles();
doubles.forEach(System.out::println);
random.doubles(long streamSize)
用于得到一个有限长度的伪随机double值流
DoubleStream doubles = random.doubles(10);
doubles.forEach(System.out::println);
random.doubles(int randomNumberOrigin, int randomNumberBound)
用于得到一个有效无限的范围在起始值到结束值之间的伪随机doubles值流,[起始值, 结束值)
DoubleStream doubles = random.doubles(1, 10);
doubles.forEach(System.out::println);
random.doubles(long streamSize, int randomNumberOrigin, int randomNumberBound)
用于得到一个有限长度的范围在起始值到结束值之间的伪随机doubles值流,[起始值, 结束值)
DoubleStream doubles = random.doubles(10, 1, 10);
doubles.forEach(System.out::println);
简单来说
Random类
import java.util.Random; public class randomTest {
public static void main(String args[])
{
Random random=new Random();//以系统当前时间作为随机数生成的种子
System.out.println(random.nextInt(10));//返回一个大于0且小于10的整数
System.out.println(random.nextFloat()); //返回一个随机浮点型
System.out.println(random.nextBoolean()); //返回一个随机布尔型值
System.out.println(random.nextDouble()); //返回一个随机双精度型
System.out.println(random.nextLong()); //返回一个随机长整形 }
}
运行结果
Math.random()方法是指让系统随机选取大于等于 0.0 且小于 100.0 的伪随机数。
1、函数:Math.random();
2、功能:产生大于等于 0 小于 1 的一个随机数;
3、公式:Math.random()*(n-m)+m,生成大于等于m小于n的随机数;
例:设置一个随机1到3(取不到3)的变量
int num = (int)(Math.random()*2+1);
Math.random()默认产生大于等于0.0且小于1.0之间的随机double型随机数
即:0.0<=Math.random()<1.0
但是稍加处理就可以产生任意随机数
public class MathRandom {
public static int getRandomInt(int num1,int num2)
{
int n=num1+(int)(Math.random()*(num2-num1));
return n;
}
public static char getRandomChar(char ch1,char ch2)
{
char ch=(char) (ch1+ Math.random()*(ch2-ch1+1));
return ch;
}
public static void main(String args[])
{
System.out.println(MathRandom.getRandomInt(1,7)); //产生的随机数包括1,不包括7
System.out.println(MathRandom.getRandomChar('a','b'));//a和b都包括
}
}
运行结果:
public class MathRandom {
public static int getRandomInt(int num1,int num2)
{
int n=num1+(int)(Math.random()*(num2-num1));
return n;
}
public static char getRandomChar(char ch1,char ch2)
{
char ch=(char) (ch1+ Math.random()*(ch2-ch1+1));
return ch;
}
public static void main(String args[])
{
System.out.println(MathRandom.getRandomInt(1,7)); //产生的随机数包括1,不包括7
System.out.println(MathRandom.getRandomChar('a','b'));//a和b都包括
}
}
运行结果:5,6
Random类和Math.random()方法的更多相关文章
- java Random类和Math.Rondom
Java中存在着两种Random函数: 一.java.lang.Math.Random; 调用这个Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取 ...
- 正则表达式、Calendar类、SimpleDateFormat类、Date类、BigDecimal类、BigInteger类、System类、Random类、Math类(Java基础知识十四)
1.正则表达式的概述和简单使用 * A:正则表达式(一个字符串,是规则) * 是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串.其实就是一种规则.有自己特殊的应用. * B: ...
- Random.nextint() 和Math.random()的区别
Random.nextint() 和Math.random()的区别 Java代码 Random rand = new Random(); long startTime = System.nano ...
- Random.nextInt()替换Math.random()
在项目中使用哪个随机数 文章参考 http://liukai.iteye.com/blog/433718 今天用了find bugs后查出来了个问题 Google了下 发现 Random.nextin ...
- random.nextInt()与Math.random()基础用法
相关文章:关于Random(47)与randon.nextInt(100)的区别 1.来源 random.nextInt() 为 java.util.Random类中的方法: Random类中还提供各 ...
- Java控制语句例题,for循环语句,if条件语句等,Scanner类与Random类,Math.max()方法
例题:编写程序,生成5个1至10之间的随机整数,并打印结果到控制台 import java.util.Random;class demo09 { public static void main(Str ...
- java中random的几个方法的使用Math.random()和random().
random java中我们有时候也需要使用使用random来产生随机数,下面我来简单的介绍下java中random的使用方法 第一种:Math.random() public static doub ...
- Java常用类(一)Math类和Random类
一.Math类 Math类中有一些常用的数学函数,比较简单,不进行详细解释,仅举例说明: 1.绝对值和取整 import java.lang.Math; public class Mat { publ ...
- Java基础知识强化82:Random类概述和方法使用
1. Random类 public class Random extends Object implements Serializable: 此类的实例用于生成伪随机数流.此类使用48位种子. (1) ...
随机推荐
- ThreadLocal浅析
1.ThreadLocal的大体理解 ThreadLocal 又名 线程局部变量,是 Java 中一种较为特殊的 线程绑定机制,可以为每一个使用该变量的线程都提供一个变量值的副本,并且每一个线程都可以 ...
- JasperReport环境设置
JasperReport是一个纯Java库,而不是一个独立的应用程序.它不能单独运行,因此它需要被嵌入到另一个客户端或服务器端的Java应用程序.因为它是基于Java,它可以在任何支持Java的平台( ...
- java读取pdf文本转换html
补充:一下代码基于maven,现将依赖的jar包单独导出 地址:pdf jar 完整代码地址 也就两个文件 java读取pdf中的纯文字,这里使用的是pdfbox工具包 maven引入如下配置 < ...
- js小项目:显示与输入的内容相关的
1,添加键盘抬起事件 2,获取文本框的内容,是否与数组中的内容匹配 3,创建元素 <!DOCTYPE html> <html lang="en"> < ...
- 结合Poi实现可读取Excel的文件选择对话框
第一步:ApachePoi的jar包导全,不全会出现异常. 第二步:写就完事了:此例为读取特定模板的excel,仅供参考,根据实际需求改写. package 自建包; import java.awt. ...
- 三(2)、springcloud之Eureka集群配置
1)原理说明** 服务启动后向Eureka注册,Eureka Server会将注册信息向其他Eureka Server进行同步,当服务消费者要调用服务提供者,则向服务注册中心获取服务提供者地址,然后会 ...
- 36-Ubuntu-用户管理-01-新建用户useradd
创建用户/设置密码/删除用户/确认用户信息 序号 命令 作用 说明 01 sudo useradd -m -g 组名 新建用户名 添加新用户 -m 自动建立用户家目录 -g 指定用户所在的组,否则会建 ...
- 怎样在Cocos2d-x中使用Lua脚本
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u013321328/article/details/25699545 笔者使用的是Cocos2d-x ...
- java oop第11章_反射、BaseDao的进一步改造
引言:从Java5开始,Java中引用了一个新的概念反射,当程序运行时,能动态感知到程序中拥有的所以信息,这个获取信息的过程是采用反射机制来完成. 一. Class类: Class类用 ...
- easyui datagrid 绑定从后台得到的复杂的特殊数据结构
由于项目需要,从后台得到的数据统一为了类似{state:xxx,data:xxx,message:xxx}类型 但是easyui datagrid却只认{total:xxx,rows:xxx}...所 ...