由浅到深认识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类

相关推荐
计算机学姐7 分钟前
基于php的摄影网站系统
开发语言·vue.js·后端·mysql·php·phpstorm
月明长歌7 分钟前
【码道初阶】牛客TSINGK110:二叉树遍历(较难)如何根据“扩展先序遍历”构建二叉树?
java·数据结构·算法
全栈陈序员15 分钟前
【Python】基础语法入门(二十)——项目实战:从零构建命令行 To-Do List 应用
开发语言·人工智能·python·学习
我不是程序猿儿19 分钟前
【C#】ScottPlot的Refresh()
开发语言·c#
Neolnfra20 分钟前
渗透测试标准化流程
开发语言·安全·web安全·http·网络安全·https·系统安全
用户21903265273520 分钟前
Spring Boot + Redis 注解极简教程:5分钟搞定CRUD操作
java·后端
计算机学姐21 分钟前
基于php的旅游景点预约门票管理系统
开发语言·后端·mysql·php·phpstorm
AA陈超23 分钟前
枚举类 `ETriggerEvent`
开发语言·c++·笔记·学习·ue5
Alice23 分钟前
linux scripts
java·linux·服务器
Filotimo_27 分钟前
Spring Data JPA 方法名查询特性的使用
java·开发语言·windows