Java随机数总结(第二部分)

开发 后端
本文是Java随机数总结的第二部分,这一部分讲到了Java随机数的测试、综合运用,以及对这两部分所讲内容的总结。

四、Java随机数的测试

通过一个例子说明上面的用法

  import java.util.Random;  
 
  /**  
 
  * Java随机数测试  
 
  * User: leizhimin  
 
  * Date: 2008-11-19 17:52:50  
 
  */ 
 
  public class TestRandomNum {  
 
  public static void main(String[] args) {  
 
  randomTest();  
 
  testNoSeed();  
 
  testSeed1();  
 
  testSeed2();  
 
  }  
 
  public static void randomTest() {  
 
  System.out.println("--------------test()--------------");  
 
  //返回以毫秒为单位的当前时间。  
 
  long r1 = System.currentTimeMillis();  
 
  //返回带正号的 double 值,大于或等于 0.0,小于 1.0。  
 
  double r2 = Math.random();  
 
  //通过Random类来获取下一个随机的整数  
 
  int r3 = new Random().nextInt();  
 
  System.out.println("r1 = " + r1);  
 
  System.out.println("r3 = " + r2);  
 
  System.out.println("r2 = " + r3);  
 
  }  
 
  public static void testNoSeed() {  
 
  System.out.println("--------------testNoSeed()--------------");  
 
  //创建不带种子的测试Random对象  
 
  Random random = new Random();  
 
  for (int i = 0; i < 3; i++) {  
 
  System.out.println(random.nextInt());  
 
  }  
 
  }  
 
  public static void testSeed1() {  
 
  System.out.println("--------------testSeed1()--------------");  
 
  //创建带种子的测试Random对象  
 
  Random random = new Random(555L);  
 
  for (int i = 0; i < 3; i++) {  
 
  System.out.println(random.nextInt());  
 
  }  
 
  }  
 
  public static void testSeed2() {  
 
  System.out.println("--------------testSeed2()--------------");  
 
  //创建带种子的测试Random对象  
 
  Random random = new Random();  
 
  random.setSeed(555L);  
 
  for (int i = 0; i < 3; i++) {  
 
  System.out.println(random.nextInt());  
 
  }  
 
  }  
 
  }  
 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.

运行结果:

--------------test()--------------  
 
  r1 = 1227108626582 
 
  r3 = 0.5324887850155043 
 
  r2 = -368083737 
 
  --------------testNoSeed()--------------  
 
  809503475 
 
  1585541532 
 
  -645134204 
 
  --------------testSeed1()--------------  
 
  -1367481220 
 
  292886146 
 
  -1462441651 
 
  --------------testSeed2()--------------  
 
  -1367481220 
 
  292886146 
 
  -1462441651 
 
  Process finished with exit code 0 
 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.

通过testSeed1()与testSeed2()方法的结果可以看到,两个打印结果相同,因为他们种子相同,再运行一次,结果还是一样的,这就是带种子随机数的特性。而不带种子的,每次运行结果都是随机的。

五、Java随机数的综合应用

下面通过最近写的一个随机数工具类来展示用法:

  import java.util.Random;  
 
  /**  
 
  * 随机数、随即字符串工具  
 
  * User: leizhimin  
 
  * Date: 2008-11-19 9:43:09  
 
  */ 
 
  public class RandomUtils {  
 
  public static final String allChar =            "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";  
 
  public static final String letterChar =         "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";  
 
  public static final String numberChar = "0123456789";  
 
  /**  
 
  * 返回一个定长的随机字符串(只包含大小写字母、数字)  
 
  *  
 
  * @param length 随机字符串长度  
 
  * @return 随机字符串  
 
  */ 
 
  public static String generateString(int length) {  
 
  StringBuffer sb = new StringBuffer();  
 
  Random random = new Random();  
 
  for (int i = 0; i < length; i++) {  
 
  sb.append(allChar.charAt(random.nextInt(allChar.length())));  
 
  }  
 
  return sb.toString();  
 
  }  
 
  /**  
 
  * 返回一个定长的随机纯字母字符串(只包含大小写字母)  
 
  *  
 
  * @param length 随机字符串长度  
 
  * @return 随机字符串  
 
  */ 
 
  public static String generateMixString(int length) {  
 
  StringBuffer sb = new StringBuffer();  
 
  Random random = new Random();  
 
  for (int i = 0; i < length; i++) {  
 
  sb.append(allChar.charAt(random.nextInt(letterChar.length())));  
 
  }  
 
  return sb.toString();  
 
  }  
 
  /**  
 
  * 返回一个定长的随机纯大写字母字符串(只包含大小写字母)  
 
  *  
 
  * @param length 随机字符串长度  
 
  * @return 随机字符串  
 
  */ 
 
  public static String generateLowerString(int length) {  
 
  return generateMixString(length).toLowerCase();  
 
  }  
 
  /**  
 
  * 返回一个定长的随机纯小写字母字符串(只包含大小写字母)  
 
  *  
 
  * @param length 随机字符串长度  
 
  * @return 随机字符串  
 
  */ 
 
  public static String generateUpperString(int length) {  
 
  return generateMixString(length).toUpperCase();  
 
  }  
 
  /**  
 
  * 生成一个定长的纯0字符串  
 
  *  
 
  * @param length 字符串长度  
 
  * @return 纯0字符串  
 
  */ 
 
  public static String generateZeroString(int length) {  
 
  StringBuffer sb = new StringBuffer();  
 
  for (int i = 0; i < length; i++) {  
 
  sb.append('0');  
 
  }  
 
  return sb.toString();  
 
  }  
 
  /**  
 
  * 根据数字生成一个定长的字符串,长度不够前面补0  
 
  *  
 
  * @param num 数字  
 
  * @param fixdlenth 字符串长度  
 
  * @return 定长的字符串  
 
  */ 
 
  public static String toFixdLengthString(long num, int fixdlenth) {  
 
  StringBuffer sb = new StringBuffer();  
 
  String strNum = String.valueOf(num);  
 
  if (fixdlenth - strNum.length() >= 0) {  
 
  sb.append(generateZeroString(fixdlenth - strNum.length()));  
 
  } else {  
 
  throw new RuntimeException("将数字" + num + "转化为长度为" + fixdlenth + "的字符串发生异    常!");  
 
  }  
 
  sb.append(strNum);  
 
  return sb.toString();  
 
  }  
 
  /**  
 
  * 根据数字生成一个定长的字符串,长度不够前面补0  
 
  *  
 
  * @param num 数字  
 
  * @param fixdlenth 字符串长度  
 
  * @return 定长的字符串  
 
  */ 
 
  public static String toFixdLengthString(int num, int fixdlenth) {  
 
  StringBuffer sb = new StringBuffer();  
 
  String strNum = String.valueOf(num);  
 
  if (fixdlenth - strNum.length() >= 0) {  
 
  sb.append(generateZeroString(fixdlenth - strNum.length()));  
 
  } else {  
 
  throw new RuntimeException("将数字" + num + "转化为长度为" + fixdlenth + "的字符串发生异    常!");  
 
  }  
 
  sb.append(strNum);  
 
  return sb.toString();  
 
  }  
 
  public static void main(String[] args) {  
 
  System.out.println(generateString(15));  
 
  System.out.println(generateMixString(15));  
 
  System.out.println(generateLowerString(15));  
 
  System.out.println(generateUpperString(15));  
 
  System.out.println(generateZeroString(15));  
 
  System.out.println(toFixdLengthString(12315));  
 
  System.out.println(toFixdLengthString(123L, 15));  
 
  }  
 
  }  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141.
  • 142.
  • 143.
  • 144.
  • 145.
  • 146.
  • 147.
  • 148.
  • 149.
  • 150.
  • 151.
  • 152.
  • 153.
  • 154.
  • 155.
  • 156.
  • 157.
  • 158.
  • 159.
  • 160.
  • 161.
  • 162.
  • 163.
  • 164.
  • 165.
  • 166.
  • 167.
  • 168.
  • 169.
  • 170.
  • 171.
  • 172.
  • 173.
  • 174.
  • 175.
  • 176.
  • 177.
  • 178.
  • 179.
  • 180.
  • 181.
  • 182.
  • 183.
  • 184.
  • 185.
  • 186.
  • 187.
  • 188.
  • 189.
  • 190.
  • 191.
  • 192.
  • 193.
  • 194.
  • 195.
  • 196.
  • 197.
  • 198.
  • 199.
  • 200.
  • 201.
  • 202.
  • 203.
  • 204.
  • 205.
  • 206.
  • 207.
  • 208.
  • 209.
  • 210.
  • 211.
  • 212.
  • 213.
  • 214.
  • 215.
  • 216.
  • 217.
  • 218.
  • 219.
  • 220.
  • 221.
  • 222.
  • 223.
  • 224.
  • 225.
  • 226.
  • 227.
  • 228.
  • 229.

运行结果:

  vWMBPiNbzfGCpHG  
 
  23hyraHdJkKPwMv  
 
  tigowetbwkm1nde  
 
  BPZ1KNEJPHB115N  
 
  000000000000000 
 
  000000000000123 
 
  000000000000123 
 
  Process finished with exit code 0 
 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

六、总结

1、随机数很常用,在Java有三种产生方式,以Random随机数的使用最为复杂。

2、Random类对象有是否带种子之分,带种子的只要种子相同,多次运行,生成随机数的结果总是那样。

3、带种子随机数的带种子的对象创建方式有两种,效果一样。但是带种子的随机数用处似乎不大。

4、Random的功能涵盖了Math.random()的功能。

5、可以通过随机数去做实现随机字符串等复杂的随机数据。

6、不要研究不重复的随机数,意义不大。

【编辑推荐】

  1. Java随机数总结(***部分)
  2. 走进Java 7中的模块系统
  3. JavaFX 1.2 已经发布 主要新功能一览
  4. 2009年十大Java技术解决方案
  5. 2008最值得学习的五种JAVA技术

 

 

 

责任编辑:仲衡 来源: 百度博客
相关推荐

2019-04-11 10:50:26

前端JavaScript开发

2013-09-17 09:45:55

编程

2013-12-13 13:16:42

LinuxLinux面试题

2009-06-12 10:48:33

Java Date

2009-06-09 15:00:51

Javascript表单验证

2009-06-12 10:18:59

StaticJava

2015-06-17 11:33:58

数据中心模块化

2013-04-08 16:16:59

Backbone.jsCRUD

2009-06-15 13:47:09

Java Applet插件

2009-06-11 15:25:39

Java随机数

2018-12-20 08:20:43

物联网供应链IOT

2009-02-23 18:00:18

CCNA视频教程

2009-08-21 09:03:18

网易魔兽玩家流失

2012-05-25 10:45:16

创业视频

2009-07-30 14:32:18

ASP.NET常用代码

2010-10-27 13:19:30

程序员软考模拟题答案

2010-10-20 13:19:21

2010年下半年软考网络工程师

2014-01-21 09:42:32

Python代码对象

2010-10-28 14:11:55

网络规划师软考模拟题答案

2017-07-10 14:00:04

Python命令行
点赞
收藏

51CTO技术栈公众号