1. package test2;
  2.  
  3. import java.util.Random;
  4.  
  5. /**
  6. * @author cy
  7. *
  8. * @date 2015年7月28日 上午8:47:52
  9. *
  10. * @Description TODO
  11. */
  12.  
  13. public class Enums {
  14. private static Random rand = new Random() ; // 为什么一直是47
  15. public static <T extends Enum<T>> T random(Class<T> ec ){
  16. return random(ec.getEnumConstants()) ;
  17. }
  18. public static <T> T random(T[] values ){
  19. int x = rand.nextInt(values.length) ;
  20. System.out.println("x: " + x);
  21. return values[x] ;
  22. }
  23. public static void main(String[] args) {
  24. for( int i = 0 ; i < 10 ; i ++){
  25. System.out.println(rand.nextInt(3));
  26. }
  27. System.out.println("=============");
  28. for( int i = 0 ; i < 11 ; i ++){
  29. System.out.println(rand.nextInt(3));
  30. }
  31. }
  32. }

上面的这个程序的输出序列不会发生变化。

下面的这个程序输出也不会发生变化。但是我本来是想达到每次运行都不同,达到随机的效果。

  1. package test2;
  2.  
  3. /**
  4. * @author cy
  5. *
  6. * @date 2015年7月28日 上午9:34:32
  7. *
  8. * @Description TODO
  9. */
  10. public enum SecurityCategory {
  11. STOCK(Security.Stock.class), BOND(Security.Bond.class);
  12. public Security[] values;
  13.  
  14. private SecurityCategory(Class<? extends Security> security) {
  15. values = security.getEnumConstants();
  16. }
  17.  
  18. interface Security {
  19. enum Stock implements Security {
  20. SHORT, LONG, MARGIN
  21. }
  22.  
  23. enum Bond implements Security {
  24. MUNICIPAL, JUNK
  25. }
  26. }
  27.  
  28. public Security randomSelect() {
  29. return Enums.random(values);
  30. }
  31.  
  32. public static void main(String[] args) {
  33. /**
  34. * 这个程序的输出不会出现随机出现的效果,
  35. * 原因: 一个java程序运行就会打开一个java虚拟机
  36. * (可以观察在系统进程中会有多个javaw.exe的进程
  37. * ,因为打开一个eclipse会有多个功能模块依靠java虚拟机运行,JVM只有一个,但有多个虚拟机实例 ),
  38. * 当程序关闭了相应的虚拟机实例也就关闭了。在该程序中有两点需要注意,1. 带有固定种子数的Random产生的随机数是
  39. * 一个固定序列。2. 每当运行程序时,静态的Random对象就会重新初始化,所以产出的随机序列就一直不变。
  40. * 所以会出现这样的运行结果:
  41. * 在Enums.java中运行main方法输出的结果一直是不变的。而且在这个程序中的输出也一直是不变的。
  42. * 如果在Random对象中不填种子数,API中是这样写的
  43. * “创建一个新的随机数生成器。此构造方法将随机数生成器的种子设置为某个值,该值与此构造方法的所有其他调用所用的值完全不同”
  44. * 虽然我没有明白这是啥意思,估计是说产生独一无二的的种子数。
  45. *
  46. */
  47. for (SecurityCategory s : SecurityCategory.values()) {
  48. /*
  49. * for(Security c : s.values){ System.out.println(c); }
  50. */
  51. System.out.println(s.randomSelect());
  52. System.out.println("============");
  53. }
  54.  
  55. }
  56. }

原因写在注释中了~~~~~~~~~~

关于Random类产生随机数的一些问题的更多相关文章

  1. .Net使用system.Security.Cryptography.RNGCryptoServiceProvider类与System.Random类生成随机数

    .Net中我们通常使用Random类生成随机数,在一些场景下,我却发现Random生成的随机数并不可靠,在下面的例子中我们通过循环随机生成10个随机数: ; i < ; i++) { Rando ...

  2. 高并发分布式系统中生成全局唯一(订单号)Id js返回上一页并刷新、返回上一页、自动刷新页面 父页面操作嵌套iframe子页面的HTML标签元素 .net判断System.Data.DataRow中是否包含某列 .Net使用system.Security.Cryptography.RNGCryptoServiceProvider类与System.Random类生成随机数

    高并发分布式系统中生成全局唯一(订单号)Id   1.GUID数据因毫无规律可言造成索引效率低下,影响了系统的性能,那么通过组合的方式,保留GUID的10个字节,用另6个字节表示GUID生成的时间(D ...

  3. Random类(随机数)

    前言:总是忘记怎么用.上网一查,都是些有的没的...... 最简单却最常用的方法:Random.Next方法 首先,为Random类实例化一个对象: Random n=new Random(); Ne ...

  4. 【代码笔记】Java常识性基础补充(一)——赋值运算符、逻辑运算符、三元运算符、Scanner类、键盘输入、Random类、随机数

    为什么要进行Java常识性基础补充? 之前学习Java语言,学得很多很杂,而且是很多不同的方面插入讲解的,比如在跟班上课,自学java编程例子,java语法,过了很久,因为各种原因长时间不怎么写,有时 ...

  5. Random 类生成随机数

    Random类 (java.util) Random类中实现的随机算法是伪随机,也就是有规则的随机.在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要 ...

  6. Random类产生随机数

    Random 类作为JAVA中用于产生的随机数 ,new  Random(10)  :10是种子数. 注意:Random 的一个特点是:相同种子数的Random对象,对应相同次数生成的随机数字是完全相 ...

  7. java Random类生成随机数

    封装一个方法: import java.util.Random; public class RandomUtil { /** * nextInt(num) 产生[0 ~ (num-1)]的随机数, 闭 ...

  8. Random类

    Random类是随机数产生类,可以指定一个随机数的范围,然后任意产生在此范围中的数字. //================================================= // F ...

  9. 数字(数学)操作类 Math Random 类 ,大数字操作类

    Math 提供了大量的数学操作方法 Math类中所有的方法都是static 方法

随机推荐

  1. js-DOM2,表单脚本

    DOM2: 1.DOM2中:创建一个完整的HTML文档 document.implementation.createHTMLDocument("new Doc"); alert(h ...

  2. 我的DbHelper数据操作类

    其实,微软的企业库中有一个非常不错的数据操作类了.但是,不少公司(起码我遇到的几个...),对一些"封装"了些什么的东西不太敢用,虽然我推荐过微软的企业库框架了...但是还是要&q ...

  3. wpf获取模板化控件中的动画。

    直接在在模版中用blend添加动画,默认会放在ControlTemplate 的 Resources下面,使用了多种方法都无法正确获取Storyboard.. <ControlTemplate ...

  4. http://www.cnblogs.com/itsource/p/4266905.html

    http://www.cnblogs.com/itsource/p/4266905.html

  5. HDU5816 Hearthstone(状压DP)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5816 Description Hearthstone is an online collec ...

  6. POJ3013 Big Christmas Tree(最短路径树)

    题目大概说给一张点和边都有权的图,现在要求其一棵以1结点为根的生成树使树的边权和最小,树边权 = 对应的图边权 * 树边末端点为根的子树所有结点对于图顶点的点权和. 要求∑(边权*子树点权和),等价于 ...

  7. eclipse 和 android studio 打包签名apk问题

    首先,我使用eclipse打包了一个签名apk 然后,我使用同一个签名文件在android studio 打包同一个项目 接下来,首先安装eclipse 打包的apk,然后安装android stud ...

  8. Kalman滤波器原理和实现

    Kalman滤波器原理和实现 kalman filter Kalman滤波器的直观理解[1] 假设我们要测量一个房间下一刻钟的温度.据经验判断,房间内的温度不可能短时大幅度变化,也就是说可以依经验认为 ...

  9. java 程序中添加socks 5代理

    在需要使用代理的地方添加如下code: System.getProperties().put("socksProxySet","true"); System.g ...

  10. BZOJ 1053 & 反素数

    题意: 反素数,膜一篇GOD's Blog...http://blog.csdn.net/ACdreamers/article/details/25049767 此文一出,无与争锋... CODE: ...