Java基础系列10-Random随机数

x33g5p2x  于2021-12-18 转载在 其他  
字(2.3k)|赞(0)|评价(0)|浏览(430)

一. java.lang.Math.Random

作用:返回带正号的double值,返回值是一个伪随机选择的数,在该范围内(近似)均匀分布。
范围:[0.0,1.0)的左闭右开区间
原理:Math.Random内部是调用的Java.util.Random无参构造器实现的

代码:

package Java_study;

//无需导包
public class suiji1 {
	public static void main(String[] args) {
		for (int i = 0; i < 5; i++) {
			System.out.println(Math.random());
		}
	}

}

测试记录:

0.2656139815369676
0.9545819797288358
0.48223757014225377
0.5396096975059794
0.2549847220943994

二. java.util.Random

使用的是48-bit的种子,然后调用一个linear congruential formula线性同余 。如果两个Random实例使用相同的种子,并且调用同样的函数,那么生成的sequence是相同的.

  1. 无参构造Random():创建一个新的随机数生成器。
    1)无参构造器内部也是调用的有参构造器,只是种子是通过系统当前时间计算出来的一个long型数据,所以多次运行结果都不一样
  2. 有参构造Random(long seed):使用单个 long 种子创建一个新的随机数生成器。
    1)有参构造在指定种子(seed)值不变的情况下,返回随机数的序列是固定的。

方法摘要:

生成下一个伪随机数。
protected int next(int bits)

返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的boolean值。
boolean nextBoolean()

生成随机字节并将其置于用户提供的 byte 数组中。
void nextBytes(byte[] bytes)

返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分布的 double值。
double nextDouble()

返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分布float值。
float nextFloat()

返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正态”)分布的double值,其平均值是0.0标准差是1.0。
double nextGaussian()

返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
int nextInt()

返回一个伪随机数,它是取自此随机数生成器序列的、在(包括和指定值(不包括)之间均匀分布的int值。
int nextInt(int n)

返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 long 值。
long nextLong()

使用单个 long 种子设置此随机数生成器的种子。
void setSeed(long seed)

范围

  1. double d1 = r.nextDouble();
    => 生成[0,1.0)区间的小数
  2. double d2 = r.nextDouble() * 5;
    => 生成[0,5.0)区间的小数
  3. double d3 = r.nextDouble() * 1.5 + 1;
    => 生成[1,2.5)区间的小数
  4. int n = r.nextInt();
    => 生成[-231,231-1)之间的整数
  5. 生成[0,10)区间的整数
    int n2 = r.nextInt(10);
    n2 = Math.abs(r.nextInt() % 10); //对10取余后,Math.abs取绝对值

代码:

package Java_study;

import java.util.Random;

public class suiji2 {
	public static void main(String[] args) {
		// 创建对象
		Random r = new Random();
		
		for (int x = 1; x <= 10; x++) {
			//获取随机数
			int number = r.nextInt();
			System.out.println("number:" + number);
		}
		
	    System.out.println("----------");
	    
	    for (int x = 1; x <= 10; x++) {
	    	//获取随机数
	    	int number1 = r.nextInt(10);
	    	System.out.println("number1:" + number1);
	    }
	    System.out.println("----------");
	    
	    
	    //如果获取一个1-100之间的随机数呢?
	    int i = r.nextInt(100) + 1;
	    
	    System.out.println(i);
	}

}

测试记录:

number:288284056
number:1636033943
number:657595534
number:-2128946490
number:1232717773
number:1103976520
number:1865262929
number:1076542435
number:879661990
number:21193790
----------
number1:9
number1:6
number1:0
number1:6
number1:7
number1:4
number1:1
number1:6
number1:6
number1:1
----------
93

参考:

  1. https://blog.csdn.net/qq_43529621/article/details/113250176

相关文章