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

相关推荐
墨染点香10 分钟前
LeetCode Hot100【6. Z 字形变换】
java·算法·leetcode
心情好的小球藻28 分钟前
Python应用进阶DAY9--类型注解Type Hinting
开发语言·python
ldj202033 分钟前
SpringBoot为什么使用new RuntimeException() 来获取调用栈?
java·spring boot·后端
超龄超能程序猿34 分钟前
Spring 应用中 Swagger 2.0 迁移 OpenAPI 3.0 详解:配置、注解与实践
java·spring boot·后端·spring·spring cloud
惜.己40 分钟前
使用python读取json数据,简单的处理成元组数组
开发语言·python·测试工具·json
风象南1 小时前
SpringBoot配置属性热更新的轻量级实现
java·spring boot·后端
洛阳泰山1 小时前
Spring Boot 整合 Nacos 实战教程:服务注册发现与配置中心详解
java·spring boot·后端·nacos
Y4090011 小时前
C语言转Java语言,相同与相异之处
java·c语言·开发语言·笔记
YuTaoShao1 小时前
【LeetCode 热题 100】994. 腐烂的橘子——BFS
java·linux·算法·leetcode·宽度优先
布朗克1681 小时前
java常见的jvm内存分析工具
java·jvm·数据库