Java基础系列10-Random随机数

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

一. java.lang.Math.Random

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

代码:

  1. package Java_study;
  2. //无需导包
  3. public class suiji1 {
  4. public static void main(String[] args) {
  5. for (int i = 0; i < 5; i++) {
  6. System.out.println(Math.random());
  7. }
  8. }
  9. }

测试记录:

  1. 0.2656139815369676
  2. 0.9545819797288358
  3. 0.48223757014225377
  4. 0.5396096975059794
  5. 0.2549847220943994

二. java.util.Random

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

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

方法摘要:

  1. 生成下一个伪随机数。
  2. protected int next(int bits)
  3. 返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的boolean值。
  4. boolean nextBoolean()
  5. 生成随机字节并将其置于用户提供的 byte 数组中。
  6. void nextBytes(byte[] bytes)
  7. 返回下一个伪随机数,它是取自此随机数生成器序列的、在0.01.0之间均匀分布的 double值。
  8. double nextDouble()
  9. 返回下一个伪随机数,它是取自此随机数生成器序列的、在0.01.0之间均匀分布float值。
  10. float nextFloat()
  11. 返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正态”)分布的double值,其平均值是0.0标准差是1.0
  12. double nextGaussian()
  13. 返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
  14. int nextInt()
  15. 返回一个伪随机数,它是取自此随机数生成器序列的、在(包括和指定值(不包括)之间均匀分布的int值。
  16. int nextInt(int n)
  17. 返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 long 值。
  18. long nextLong()
  19. 使用单个 long 种子设置此随机数生成器的种子。
  20. 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取绝对值

代码:

  1. package Java_study;
  2. import java.util.Random;
  3. public class suiji2 {
  4. public static void main(String[] args) {
  5. // 创建对象
  6. Random r = new Random();
  7. for (int x = 1; x <= 10; x++) {
  8. //获取随机数
  9. int number = r.nextInt();
  10. System.out.println("number:" + number);
  11. }
  12. System.out.println("----------");
  13. for (int x = 1; x <= 10; x++) {
  14. //获取随机数
  15. int number1 = r.nextInt(10);
  16. System.out.println("number1:" + number1);
  17. }
  18. System.out.println("----------");
  19. //如果获取一个1-100之间的随机数呢?
  20. int i = r.nextInt(100) + 1;
  21. System.out.println(i);
  22. }
  23. }

测试记录:

  1. number:288284056
  2. number:1636033943
  3. number:657595534
  4. number:-2128946490
  5. number:1232717773
  6. number:1103976520
  7. number:1865262929
  8. number:1076542435
  9. number:879661990
  10. number:21193790
  11. ----------
  12. number1:9
  13. number1:6
  14. number1:0
  15. number1:6
  16. number1:7
  17. number1:4
  18. number1:1
  19. number1:6
  20. number1:6
  21. number1:1
  22. ----------
  23. 93

参考:

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

相关文章