Java编程中如何在一个数值范围内生成一个伪随机数

//出自:http://my.oschina.net/huangwenwei/blog/224138?fromerr=cHulfGx7

在软件开发编程中,我们经常需要生成一个随机数值。比如在1~100的整型范围内生成一个随机数。幸运的是,由于在Java API中提供了生成随机数的类,可以通过java.util.Random类、Math.random工具方法和ThreadLocalRandom类快速地生成一个伪随机数。在Java中的工具方法random()生成随机数更加方便,它只返回一个随机的浮点数,另一方面通过使用Random,你可以生成一个伪随机整型或者浮点型的数值。在这篇文章中,将会讨论在Java中如何生成一个随机数,用例子说明产生随机整型和实数、在给定的范围内生成随机一个数,同时还将探讨java.util.Random类和Math.random()之间的区别。

通过例子在解释Java如何生成随机数

在前面的简介中提到Java中的Random类被用来创建一个随机数,通过默认的种子,你可以创建一个Random类的实例,或者提供你自己的种子创建一个定制的Random实例,Random(long seed)。这个类提供了返回随机整型、浮点型和布尔型的方法。

Random random = new Random()

for(int i=0;i<5; i++){
     int randomInteger = random.nextInt();
     System.out.printIn("Random Integer in java:" + randomInteger);
}

Output:
Random Integer in java -1194538938
Random Integer in java -973476571
Random Integer in java -1283186469
Random Integer in java 117667327
Random Integer in java 265551019

使用Java中整型的数值范围(-2^31~2^31-1由正数和负数组成),Random类默认在这个数值范围内生成一个随机数。同样地,你可以使用Math.random()方法创建一个随机数。

for(int i=0; i<3; i++){
     double randomDouble = Math.random();
     System.out.println("Random Number in java:" + randomDouble);
}

Output:
Random Number in Java: 0.767752638941705   
Random Number in Java: 0.482517390182052
Random Number in Java:0.282439118792283

如何生成整型数值

如果你想在两个整型数值的范围内生成一个随机整数,建议使用random.nextInt()方法,该方法将返回等可能性的全部整型。你也可以使用Math.random()方法先生成一个随机的浮点数,然后再转化为整型,综上所述,你有两种方式生成随机数整数

如何生成浮点型数值

与生成整型数值相似,这里用到的是Random类中的nextDuoble()方法,此方法返回0.0~1.0之间的伪随机浮点数。

如何生成布尔型

使用Random类中的nextBoolean()方法生成一个布尔型的值。

在给定的两个数之间随机生成一个数

使用Math.random()方法和Random类可以在一个范围中生成随机数。大多数时候,我们仅需要整型而不是Math.random()方法生成的随机浮点型,所以需要对浮点型进行更改为整型。

for(int i =0; i<3; i++){
    int randomInteger = random.nextInt(10);
    System.out.println("pseudo random int in a range : " + randomInteger);
}

Output:
pseudo random int in a range : 7
pseudo random int in a range : 1
pseudo random int in a range : 3
Random.nextInt(10)方法的返回值是0<=x<10之间的一个随机数。


在0~10之间的随机数

下面的代码段能够生成一个x,x的取值范围为:0<=x<10。由于使用了Math.random()方法,返回值为0~1.0。


for(int i =0; i<3; i++){
      int randomInt = (int)(10.0 * Math.random());
      System.out.println("pseudo random int between 1 and 10 : " + randomInt );
}

Output:
pseudo random int between 1 and 10 : 4
pseudo random int between 1 and 10 : 0
pseudo random int between 1 and 10 : 2

Read more: http://javarevisited.blogspot.com/2013/05/how-to-generate-random-numbers-in-java-between-range.html#ixzz2zJWpxdHB


Math.random()方法和Random类不同点

使用这两种方式都可以生成一个随机数,但是两者之间的用法和表现形式还是有一点区别的。

  1. 为了生成一个随机数,实际上这些都是为随机数,使用Random类,你需要创建该类的一个实例;对于Math.random()方法,第一次调用该方法时会创建一个新的伪随机数生成器,用表达式表示如:new java,util.Random()。这个伪随机数生成器等同于new Random(),并且仅在这能被使用。
  2. Random类支持生成随机整型、浮点型和布尔型,而Math.rand()方法仅支持生成一个在0.0~1.0之间的浮点型数值。
  3. 使用Math.random()方法时,我们不能更改生成随机数的种子,它是在任意一个Math实例调用该方法时创建的。这个方法为同步的,这意味着允许在多线程环境下使用,随着线程数的增加,会导致资源竞争。通常在多线程环境下同时想创建随机数,土建使用ThreadLocalRandom,提高程序的性能。
  4. Math.random()方法是一个工具方法,Random类才是真正的随机数生成数,它提供了一系列方法用以生成不同类型的数据类型。

总结

  1. 在Java中生成随机数可用三种方式:Random类、ThreadLocalRandom类或者Math.random()方法。
  2. Random类能生成整型、浮点型或布尔型。
  3. 生成的随机数是伪随机数,
  4. Math.random()仅生成0.0~1.0之间的浮点类型数值。
  5. Math.random()是线程安全方法,在多线程环境下能够被调用。但是为了降低资源竞争而把随机数生成器分开不是一种明智的做法。在jdk1.7中,如果你想在多线程最后那个共享随机数生成数,ThreadLocalandom类为不错的选择。
  6. 尽管随机数接受一个长整型的种子(64bits),但只使用了48bits生成随机数。
  7. Random类不是final类,你可以继承实现你自己的算法。
  8. 使用Math.random()方法容易和方便的创建随机数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值