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

发表于:2020-10-14 10:04

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:倏逝波    来源:CSDN

#
Java
分享:
  Java中生成随机数
  人机交互过程中,当我们需要机器给我们反馈不确定的数字结果时,就会需要用到随机数了,那么,在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));
          }
      }
  运行结果:
  这里总结一个应用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对象。
  运行结果:
  再执行一次代码的结果:
  怎么样?是不是发现下面的有参构造生成的随机数每次运行结果都是一样的,而无参构造方法的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之间的整数):
  在这里插入图片描述
  根据需要可以灵活使用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));
  小结
  以上就是近期自己总结的两种Java中生成随机数的方法,实际上打开Math类中的random方法的源码我们可以发现,这个方法就是直接调用Random类中的nextDouble方法来实现的。至于实际使用看个人爱好吧,比较推荐直接使用Math类的random方法,要记住的是,以上两种方法生成的随机数都是会重复的,如果有不能重复的需求,则需要添加其他操作了。

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号