Java获取随机数的3种方法和总结

上传人:宝路 文档编号:23264158 上传时间:2017-11-30 格式:DOCX 页数:24 大小:54.19KB
返回 下载 相关 举报
Java获取随机数的3种方法和总结_第1页
第1页 / 共24页
Java获取随机数的3种方法和总结_第2页
第2页 / 共24页
Java获取随机数的3种方法和总结_第3页
第3页 / 共24页
Java获取随机数的3种方法和总结_第4页
第4页 / 共24页
Java获取随机数的3种方法和总结_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《Java获取随机数的3种方法和总结》由会员分享,可在线阅读,更多相关《Java获取随机数的3种方法和总结(24页珍藏版)》请在金锄头文库上搜索。

1、方法 1(数据类型)(最小值+Math.random()*(最大值-最小值+1)例:(int)(1+Math.random()*(10-1+1)从 1 到 10 的 int 型随数方法 2获得随机数for (int i=0;i= 0) sb.append(generateZeroString(fixdlenth - strNum.length(); else throw new RuntimeException(将数字 + num + 转化为长度为 + fixdlenth + 的字符串发生异常!);sb.append(strNum);return sb.toString();public st

2、atic 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 + 的字符串发生异常!);s

3、b.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

4、(toFixdLengthString(123, 15);System.out.println(toFixdLengthString(123L, 15);运行结果:vWMBPiNbzfGCpHG23hyraHdJkKPwMvtigowetbwkm1ndeBPZ1KNEJPHB115N000000000000000000000000000123000000000000123Process finished with exit code 0六、总结1、随机数很常用,在 Java 有三种产生方式,以 Random 随机数的使用最为复杂。2、Random 类对象有是否带种子之分,带种子的只要种子相同,

5、多次运行,生成随机数的结果总是那样。3、带种子随机数的带种子的对象创建方式有两种,效果一样。但是带种子的随机数用处似乎不大。4、Random 的功能涵盖了 Math.random()的功能。5、可以通过随机数去做实现随机字符串等复杂的随机数据。6、不要研究不重复的随机数,意义不大。在 Java 中我们可以使用 java.util.Random 类来产生一个随机数发生器。它有两种形式的构造函数,分别是 Random()和 Random(long seed)。Random()使用当前时间即System.currentTimeMillis()作为发生器的种子,Random(long seed)使用指

6、定的 seed 作为发生器的种子。随机数发生器(Random)对象产生以后,通过调用不同的 method:nextInt()、nextLong()、nextFloat()、nextDouble()等获得不同类型随机数。1生成随机数Random random = new Random();Random random = new Random(100);/指定种子数 100random 调用不同的方法,获得随机数。 如果 2 个 Random 对象使用相同的种子(比如都是 100),并且以相同的顺序调用相同的函数,那它们返回值完全相同。如下面代码中两个 Random 对象的输出完全相同import

7、 java.util.*;class TestRandom public static void main(String args) Random random1 = new Random(100);System.out.println(random1.nextInt();System.out.println(random1.nextFloat();System.out.println(random1.nextBoolean();Random random2 = new Random(100);System.out.println(random2.nextInt();System.out.pr

8、intln(random2.nextFloat();System.out.println(random2.nextBoolean();2指定范围内的随机数随机数控制在某个范围内,使用模数运算符%import java.util.*;class TestRandom public static void main(String args) Random random = new Random();for(int i = 0; i 获取指定范围内的不重复随机数 import java.util.*;class TestRandom public static void main(String ar

9、gs) int intRet = new int6;int intRd = 0; /存放随机数int count = 0; /记录生成的随机数个数int flag = 0; /是否已经生成过标志while(count+intRett);Java 中的随机数是否可以重复?Java 中产生的随机数能否可以用来产生数据库主键?带着这个问题,我们做了一系列测试。1.测试一: 使用不带参数的 Random()构造函数public class RandomTest public static void main(String args) java.util.Random r=new java.util.R

10、andom();for(int i=0;i10;i+)System.out.println(r.nextInt();程序运行结果:-1761145445-1070533012216216989-910884656-1408725314-10918028701681403823-1099867456347034376-1277853157再次运行该程序:-169416241220377062-1140589550-1364404766-10881167562134626361-5460497281132916742-15223197211787867608从上面的测试我们可以看出,使用不带参数的

11、 Random()构造函数产生的随机数不会重复。那么,什么情况下 Java 会产生重复的随机数呢?且看下面的测试。2. 测试二:为 Random 设置种子数public class RandomTest_Repeat public static void main(String args) java.util.Random r=new java.util.Random(10);for(int i=0;i10;i+)System.out.println(r.nextInt();无论程序运行多少次,其结果总是:-1157793070191398476011072545861773446580254

12、270492-140806438410484755941581279777-7782093331532292428甚至在不同的机器上测试,测试结果也不会改变!3.原因分析:(1) 首先请打开 Java Doc,我们会看到 Random 类的说明:此类的实例用于生成伪随机数流,此类使用 48 位的种子,该种子可以使用线性同余公式对其进行修改(请参阅 Donald Knuth 的The Art of Computer Programming, Volume 2,第 3.2.1 节)。如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。为

13、了保证实现这种特性,我们为类 Random 指定了特定的算法。为了 Java 代码的完全可移植性,Java 实现必须让类 Random 使用此处所示的所有算法。但是允许 Random 类的子类使用其他算法,只要其符合所有方法的常规协定即可。Java Doc 对 Random 类已经解释得非常明白,我们的测试也验证了这一点。(2) 如果没有提供种子数,Random 实例的种子数将是当前时间的毫秒数,可以通过System.currentTimeMillis()来获得当前时间的毫秒数。打开 JDK 的源代码,我们可以非常明确地看到这一点。public Random() this(System.cur

14、rentTimeMillis(); 4. 结论:通过上面的测试和分析,我们会对 Random 类有较为深刻的理解。同时,我觉得,通过阅读 Java Doc 的 API 文档,可以很好地提高我们的 Java 编程能力,做到“知其然”;一旦遇到费解的问题,不妨打开 Java 的源代码,这样我们就能做到“知其所以然”。-java 中一般有两种随机数,一个是 Math 中 random()方法,一个是 Random 类。一、Math.random()随即生成 0x1 的小数。实例:如何写,生成随机生成出 0100 中的其中一个数呢?Math.random()返回的只是从 0 到 1 之间的小数,如果要

15、 50 到 100,就先放大 50 倍,即 0 到 50 之间,这里还是小数,如果要整数,就强制转换 int,然后再加上 50 即为50100.最终代码:(int)(Math.random()*50) + 50二、Random 类Random random = new Random();/默认构造方法Random random = new Random(1000);/指定种子数字在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要的随机数字。相同种子数的 Random 对象,相同次数生成的随机数字是完全相同的。也就是说,两个种子数相同的 Random 对象,第一次生成的随机数字完全相同,第二次生成的随机数字也完全相同。2 、Random 类中的常用方法Random 类中的方法比较简单,每个方法的功能也很容易理解。需要说明的是,Random 类中各方法生成的随机数字都是均匀分布的,也就是说区间内部的数字生成的几率是均等的。下面对这些方法做一下基本的介绍:a 、public boolean nextBoolean()该方法的作用是生成一个随机的 boolean 值,生成 true 和

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号