由浅到深认识Java语言(22):Random类

该文章Github地址:https://github.com/AntonyCheng/java-notes

在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址:https://blog.csdn.net/AntonyCheng/article/details/136555245),该模板集成了最常见的开发组件,同时基于修改配置文件实现组件的装载,除了这些,模板中还有非常丰富的整合示例,同时单体架构也非常适合SpringBoot框架入门,如果觉得有意义或者有帮助,欢迎Star & Issues & PR!

上一章:由浅到深认识Java语言(21):Math类

34.Random类

此类的实例用于生成伪随机数流,此类使用 48 位的种子形成随机数,即该类有机会生成 248 个结果;

所以世界上没有真正的随机数,因为在程序里的所有随机数都是由计算机通过算法而得到的;

Random构造器

构造方法摘要
Random() 创建一个新的随机数生成器。
Random(long seed) 使用单个 long 种子创建一个新的随机数生成器,该种子就是伪随机的证明。

Random方法

返回类型 方法解释
protected int next(int bits) 生成下一个伪随机数,看到protected方法先不要用,因为需要继承。
boolean nextBoolean() 返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 boolean 值。
void nextBytes(byte[] bytes) 生成随机字节并将其置于用户提供的 byte 数组中。
double nextDouble() 返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.01.0 之间均匀分布的 double 值。
float nextFloat() 返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.01.0 之间均匀分布的 float 值。
double nextGaussian() 返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯("正态")分布的 double 值,其平均值是 0.0,标准差是 1.0
int nextInt() 返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
int nextInt(int n) 返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。
long nextLong() 返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 long 值。
void setSeed(long seed) 使用单个 long 种子设置此随机数生成器的种子。

常用方法

nextBoolean() 随机生成一个布尔值;

java 复制代码
package top.sharehome.Bag;

import java.util.Random;

public class Method {
	public static void main(String[] args) {
		Random r = new Random();
		boolean nextBoolean = r.nextBoolean();
		System.out.println(nextBoolean);
	}
}

打印效果如下:

nextBytes(byte[] bytes) 随机生成一个字节数组,并覆盖已有数组;

java 复制代码
package top.sharehome.Bag;

import java.util.Arrays;
import java.util.Random;

public class Demo {
	public static void main(String[] args) {
		byte[] b = {0,0,0,0,0,0,0,0};
		Random r = new Random();
		r.nextBytes(b);
		System.out.println(Arrays.toString(b));
	}
}

打印效果如下:

nextDouble() 随机生成一个 0.0-1.0 的 double;

java 复制代码
package top.sharehome.Bag;

import java.util.*;

public class Demo {
	public static void main(String[] args) {
		Random r = new Random();
		double nextDouble = r.nextDouble();
		System.out.println(nextDouble);
	}
}

打印效果如下:

nextFloat() 随机生成一个 0.0-1.0 的 float;

java 复制代码
package top.sharehome.Bag;

import java.util.*;

public class Demo {
	public static void main(String[] args) {
		Random r = new Random();
		float nextFloat = r.nextFloat();
		System.out.println(nextFloat);
	}
}

打印效果如下:

nextGaussian() 随机生成一个 0.0-1.0(不包括) 的数,该数出现几率按高斯分布;

java 复制代码
package top.sharehome.Bag;

import java.util.*;

public class Demo {
	public static void main(String[] args) {
		int count1 = 0;
		int count2 = 0;
		int count3 = 0;
		Random r = new Random();
		for (int j = 0; j < 5; j++) {
			for (int i = 0; i < 1000000; i++) {
				double nextGaussian = r.nextGaussian();
				if (nextGaussian <= 0.33) {
					count1++;
				} else if (nextGaussian > 0.33 && nextGaussian < 0.66) {
					count2++;
				} else {
					count3++;
				}
			}
			System.out.println(count1 + " " + count2 + " " + count3);
			count1 = 0;
			count2 = 0;
			count3 = 0;
		}
	}
}

打印效果如下:

nextInt() 随机生成一个整数;

java 复制代码
package top.sharehome.Bag;

import java.util.*;

public class Demo {
	public static void main(String[] args) {
		Random r = new Random();
		int nextInt = r.nextInt();
		System.out.println(nextInt);
	}
}

打印效果如下:

nextInt(int n) 随机生成一个 0-n 的整数;

java 复制代码
package top.sharehome.Bag;

import java.util.*;

public class Demo {
	public static void main(String[] args) {
		Random r = new Random();
		for (int i = 0; i < 11; i++) {
			int nextInt = r.nextInt(10);
			System.out.print(nextInt + " ");
		}
	}
}

打印效果如下:

nextLong() 随机生成一个 long;

java 复制代码
package top.sharehome.Bag;

import java.util.*;

public class Demo {
	public static void main(String[] args) {
		Random r = new Random();
		long nextLong = r.nextLong();
		System.out.println(nextLong);
	}
}

打印效果如下:

下一章:由浅到深认识Java语言(23):System类

相关推荐
厦门德仔11 分钟前
【WPF】WPF(样式)
android·java·wpf
大春儿的试验田12 分钟前
高并发收藏功能设计:Redis异步同步与定时补偿机制详解
java·数据库·redis·学习·缓存
Gappsong87415 分钟前
【Linux学习】Linux安装并配置Redis
java·linux·运维·网络安全
likeGhee19 分钟前
python缓存装饰器实现方案
开发语言·python·缓存
hqxstudying19 分钟前
Redis为什么是单线程
java·redis
whoarethenext26 分钟前
使用 C++/Faiss 加速海量 MFCC 特征的相似性搜索
开发语言·c++·faiss
RainbowSea30 分钟前
NVM 切换 Node 版本工具的超详细安装说明
java·前端
项目題供诗31 分钟前
黑马python(二十五)
开发语言·python
逆风局?32 分钟前
Maven高级——分模块设计与开发
java·maven
周某某~34 分钟前
maven详解
java·maven