关于Random类产生随机数的一些问题
2015-07-28 22:45
399 查看
package test2; import java.util.Random; /** * @author cy * * @date 2015年7月28日 上午8:47:52 * * @Description TODO */ public class Enums { private static Random rand = new Random() ; // 为什么一直是47 public static <T extends Enum<T>> T random(Class<T> ec ){ return random(ec.getEnumConstants()) ; } public static <T> T random(T[] values ){ int x = rand.nextInt(values.length) ; System.out.println("x: " + x); return values[x] ; } public static void main(String[] args) { for( int i = 0 ; i < 10 ; i ++){ System.out.println(rand.nextInt(3)); } System.out.println("============="); for( int i = 0 ; i < 11 ; i ++){ System.out.println(rand.nextInt(3)); } } }
上面的这个程序的输出序列不会发生变化。
下面的这个程序输出也不会发生变化。但是我本来是想达到每次运行都不同,达到随机的效果。
package test2; /** * @author cy * * @date 2015年7月28日 上午9:34:32 * * @Description TODO */ public enum SecurityCategory { STOCK(Security.Stock.class), BOND(Security.Bond.class); public Security[] values; private SecurityCategory(Class<? extends Security> security) { values = security.getEnumConstants(); } interface Security { enum Stock implements Security { SHORT, LONG, MARGIN } enum Bond implements Security { MUNICIPAL, JUNK } } public Security randomSelect() { return Enums.random(values); } public static void main(String[] args) { /** * 这个程序的输出不会出现随机出现的效果, * 原因: 一个java程序运行就会打开一个java虚拟机 * (可以观察在系统进程中会有多个javaw.exe的进程 * ,因为打开一个eclipse会有多个功能模块依靠java虚拟机运行,JVM只有一个,但有多个虚拟机实例 ), * 当程序关闭了相应的虚拟机实例也就关闭了。在该程序中有两点需要注意,1. 带有固定种子数的Random产生的随机数是 * 一个固定序列。2. 每当运行程序时,静态的Random对象就会重新初始化,所以产出的随机序列就一直不变。 * 所以会出现这样的运行结果: * 在Enums.java中运行main方法输出的结果一直是不变的。而且在这个程序中的输出也一直是不变的。 * 如果在Random对象中不填种子数,API中是这样写的 * “创建一个新的随机数生成器。此构造方法将随机数生成器的种子设置为某个值,该值与此构造方法的所有其他调用所用的值完全不同” * 虽然我没有明白这是啥意思,估计是说产生独一无二的的种子数。 * */ for (SecurityCategory s : SecurityCategory.values()) { /* * for(Security c : s.values){ System.out.println(c); } */ System.out.println(s.randomSelect()); System.out.println("============"); } } }
原因写在注释中了~~~~~~~~~~
相关文章推荐
- 7.28CSS盒模型
- HDU 5317 RGCDQ (素因子分解+预处理)
- php的curl抓包
- 应用间的跳转
- CSS的学习笔记---(一)
- 直接在文本看代码,谁能指出错在哪里
- splObjectStroge的作用,实例化一个数组
- application19事件 20多少步骤 具体20多少只有微软知道!!!
- kafka实时监控
- 事件绑定的三种方法
- Scipy:高端科学计算
- discuzQQ互联错误
- Android中popupWindow的各种方法简介
- 转 Oracle B-tree、位图、全文索引三大索引性能比较及优缺点汇总
- 我—工作了!
- 非递归方法遍目录
- 谷歌
- hexo 资源帖 索引
- 比较全的JS checkbox全选、取消全选、删除功能代码
- nginx同一iP多域名配置方法