Java 随机数详解

2015-08-06· 4227 次浏览
## 概述 Java随机数的产生方法有2种,一种是Math.random()方法,一种是Random类。 Math.random()可以随机生成一个0-1的double类型浮点数。 Random类需要一个随机数种子来产生一个随机数,默认构造函数Random()使用当前时间(System.currentTimeMillis())作为发生器的种子,也可以使用Random(long seed)指定发生器的种子。 随机数发生器(Random)对象产生以后,可以通过调用不同的方法(nextInt()、nextLong()、nextFloat()、nextDouble()等)获得不同类型随机数。指定随机数种子后,每次运行生成的随机数序列结果都一样。 ## 生成随机数 ### 使用Random类生成随机数 ```java Random random = new Random(); System.out.println(random.nextInt());// 生成整形随机数 System.out.println(random.nextFloat());// 生成浮点型随机数 System.out.println(random.nextBoolean());// 生成布尔类型随机数 ``` ### 使用Math.random()方法生成随机数 ```java double random = Math.random(); System.out.println(random); ``` ## 生成指定范围的随机数 生成“5 =< result < 30”的随机数。 ### 使用Random类 ``` int min = 5; int max = 30; Random random = new Random(); // 5 =< result < 30 int result = random.nextInt(max - min) + min; System.out.println(result); ``` ### 使用Math.random()方法 ``` int min = 5; int max = 30; int result = (int) (Math.random() * (max - min)) + min; System.out.println(result); ``` ## 生成随机密码 生成包含大小写字母、数字、特殊字符的指定长度密码 ### 使用ASCII码 ``` int length = 15; Random random = new Random(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < length; i++) { sb.append((char) (random.nextInt(127 - 33) + 33)); } System.out.println(sb.toString());// &%TK^5%{@VE4<g6 ``` ### 使用指定的字符串 ``` String chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; int length = 15; Random random = new Random(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < length; i++) { sb.append(chars.charAt(random.nextInt(chars.length()))); } System.out.println(sb.toString());// 6FUCPy9hCJRbBSg ``` ## Random类常用API | 方法 | 描述 | | --- | --- | | Random() | 创建一个新的随机数生成器。 | | Random(long seed) | 使用seed种子创建一个新随机数生成器。 | | protected int next(int bits) | 生成下一个伪随机数。 | | boolean nextBoolean() | 返回下一个伪随机数,它是从此随机数生成器的序列中取出的、均匀分布的 boolean 值。 | | void nextBytes(byte\[\] bytes) | 生成随机字节并将其置于用户提供的字节数组中。 | | double nextDouble() | 返回下一个伪随机数,它是从此随机数生成器的序列中取出的、在 0.0 和 1.0之间均匀分布的 double 值。 | | float nextFloat() | 返回下一个伪随机数,它是从此随机数生成器的序列中取出的、在 0.0 和 1.0 之间均匀分布的 float 值。 | | double nextGaussian() | 返回下一个伪随机数,它是从此随机数生成器的序列中取出的、呈高斯(“正常地”)分布的 double 值,其平均值是 0.0,标准偏差是 1.0。 | | int nextInt() | 返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。 | | int nextInt(int n) | 返回一个伪随机数,它是从此随机数生成器的序列中取出的、在 0(包括)和指定值(不包括)之间均匀分布的 int值。 | | long nextLong() | 返回下一个伪随机数,它是从此随机数生成器的序列中取出的、均匀分布的 long 值。 | | void setSeed(long seed) | 使用seed设置此随机数生成器的种子。 |