Java两种常用的随机数生成方式(小白总结)

作者:倏逝波 时间:2023-02-16 16:54:19 

人机交互过程中,当我们需要机器给我们反馈不确定的数字结果时,就会需要用到随机数了,那么,在Java中,我们应当如何来生成并使用随机数呢?

一、通过Random类来实现

Random类是JDK的java.util包中的一个工具类,该类可用于在指定范围内产生随机数字。考察一下Random类的两种构造方法:无参构造和有参构造

Random(); 无参构造方法创建一个伪随机数生成器。Random(long seed);有参构造方法使用一个long型的种子创建伪随机数生成器。
下面分别使用两种方式创建Random对象来获取10个0到100的随机数

无参构造方式


public class demo1 {
 public static void main(String[] args) {
   Random random = new Random();
   for (int i = 0; i < 10; i++) {
     System.out.println(random.nextInt(100));
   }
 }

运行结果:

Java两种常用的随机数生成方式(小白总结)

这里总结一个应用random.nextInt()的式子:random.nextInt(n)+m,返回的是m到m+n-1之间的随机数。比如random.nextInt(9)+1,得到就是1到10之间的某数,如果没有n和m,那么就是生成一个随机的int类型的值。当然除了int类型,也可以生成其他数字型的基本数据类型的随机数,比如double、float、byte等等。

  • nextDouble()方法返回的是0.0到1.0之间的一个double类型的值

  • nextFloat()方法返回的是0.0到1.0之间的一个float类型的值

有参构造方式


public class demo1 {
 public static void main(String[] args) {
   Random random = new Random();
   for (int i = 0; i < 10; i++) {
     System.out.println(random.nextInt(100));
   }
   Random random1 = new Random(100);
   System.out.println("---------");
   for(int i = 0 ;i<10;i++){
     System.out.println(random1.nextInt(100));
   }
 }

这里为了方便跟无参构造方法创建的随机数生成器作比较,创建了两个Random对象。

运行结果:

Java两种常用的随机数生成方式(小白总结)

再执行一次代码的结果:

Java两种常用的随机数生成方式(小白总结)

怎么样?是不是发现下面的有参构造生成的随机数每次运行结果都是一样的,而无参构造方法的random对象每次都能得到不同的随机数。

这里的原因是:无参构造方法在创建Random对象时没有传入种子参数,程序会自动以当前时间为时间戳,于是每一次的运行结果都是不同的。而有参构造方法创建Random对象时传入了种子参数,两次运行时种子相同,实际上不管运行多少次,结果都是一样的。

二、使用Math类的random方法

Java中的Math类也提供了一个生成随机数的random方法。
首先需要明确,Math.random()是随机生成一个0.0到1.0之间的double类型的随机数,这里包含0而不包含1。

常见的用法:


public class demo1 {
 public static void main(String[] args) {
   for (int i = 0; i < 3; i++) {
     System.out.println((int) (Math.random() * 10));
   }
 }

Math.random()生成0到1之间的double数,乘以10就变成了0到10之间的double数,再转成int型,这是我平时接触比较多的用法(通常我们使用随机数也是int类型的居多)。运行结果如下(3个0到10之间的整数):

Java两种常用的随机数生成方式(小白总结)

根据需要可以灵活使用random()方法:

  • (int)(Math.random()*n)生成大于等于0小于n的随机数。

  • (int)(Math.randon()*n)+m生成大于等于m小于m+n的之间的随机数。

  • (int)(Math.random()*(n-m)+m)生成从m到n范围内的数,包含m不包含n。

另外,我们还可以用这种方式生成字符:

随机生成a~z之间的字符
(char)(‘a'+Math.random()*(‘z'-‘a'+1));

随机生成cha1~cha2的字符
(char)(cha1+Math.random()*(cha2-cha1+1));

小结

来源:https://blog.csdn.net/weixin_43427312/article/details/109007595

标签:Java,随机数生成
0
投稿

猜你喜欢

  • java实现简单银行家算法

    2022-01-31 23:33:19
  • java加载properties文件的六种方法总结

    2023-09-20 05:24:54
  • SpringBoot+微信小程序实现文件上传与下载功能详解

    2023-01-17 15:56:39
  • 在类库或winform项目中打开另一个winform项目窗体的方法

    2023-08-14 06:47:31
  • 详解Java Map中三个冷门容器的使用

    2021-09-02 14:27:22
  • Java深入探究关键字abstract的使用

    2023-08-03 07:48:20
  • Maven的生命周期与自定义插件实现方法

    2022-04-06 20:13:48
  • 关于springboot集成swagger及knife4j的增强问题

    2023-11-29 00:43:50
  • Flutter Shell自动化打包解放双手

    2021-09-17 18:39:15
  • Java实现手写线程池实例并测试详解

    2022-03-04 11:23:27
  • 详解JAVA 内存管理

    2023-01-13 04:35:51
  • 浅谈java 增强型的for循环 for each

    2023-03-30 18:51:05
  • android使用AsyncTask实现多线程下载实例

    2023-02-02 16:30:04
  • 一次由Lombok的@AllArgsConstructor注解引发的错误及解决

    2023-10-07 05:23:42
  • Java中抽象类与方法的重写方式

    2023-08-25 09:20:29
  • Android实现的数字格式化用法示例

    2023-09-30 09:03:28
  • Android的OkHttp包处理用户认证的代码实例分享

    2022-04-25 00:00:52
  • Unity3D实现渐变颜色效果

    2022-09-03 08:14:32
  • Android11文件管理权限申请详细介绍

    2023-08-28 17:41:47
  • Qt串口通信开发之QSerialPort模块简单使用方法与实例

    2023-03-23 03:25:45
  • asp之家 软件编程 m.aspxhome.com