java.uti.Random类nextInt方法中随机数种子为47的奇怪问题
2016-04-19 16:57
519 查看
一,问题描述
需要生成一个[0,1]的随机数。即随机生成 0 或者 1。使用java.util.Random类的 nextInt(int)方法,当构造Random类的对象并提供随机数种子时,发现了一个奇怪的问题:
当使用 47 作为随机数种子构造 Random对象时:
使用该对象调用 nextInt(2)方法,在Eclipse中测试,运行了20次,全部都生成 1,没有出现一次0。
当不提供随机数种子构造Random对象时:
在Eclipse中测试,运行了15次,10次出现0,5次出现1。
感觉,使用47做随机数种子,且只需随机 生成 0 和 1 这两个数时,并不适合。
因为,测试了多次,它总是偏向于生成其中某一个数,而另一个数没有出现。
需要生成一个[0,1]的随机数。即随机生成 0 或者 1。使用java.util.Random类的 nextInt(int)方法,当构造Random类的对象并提供随机数种子时,发现了一个奇怪的问题:
当使用 47 作为随机数种子构造 Random对象时:
public static Random rand2 = new Random(47); ..... System.out.println(rand2.nextInt(2)); .....
使用该对象调用 nextInt(2)方法,在Eclipse中测试,运行了20次,全部都生成 1,没有出现一次0。
当不提供随机数种子构造Random对象时:
public static Random rand = new Random(); ..... System.out.println(rand.nextInt(2));//0 or 1
在Eclipse中测试,运行了15次,10次出现0,5次出现1。
感觉,使用47做随机数种子,且只需随机 生成 0 和 1 这两个数时,并不适合。
因为,测试了多次,它总是偏向于生成其中某一个数,而另一个数没有出现。
public class TestRand { public static Random rand = new Random(); public static Random rand2 = new Random(47); public static void main(String[] args) { //System.out.println(rand.nextInt(2));//0 or 1 //System.out.println(myRand(0,1));// 0 or 1 System.out.println(rand2.nextInt(2));//always 1 or always 0 //System.out.println(myRand2(0, 1));//always 1 or always 0 } public static int myRand(int i, int j){ return rand.nextInt(j - i + 1) + i; } public static int myRand2(int i, int j){ return rand2.nextInt(j - i + 1) + i; } }
相关文章推荐
- spring中jdbctemplate的使用以及c3p0
- Eclipse中mybatis自动生成代码
- JDK高性能编程之容器
- java 分次读取大文件的三种方法
- Java设计模式系列之适配器模式
- java fock join 列子
- java进程间通信(IPC interProcess communication)
- java利用反射扩展任意数组的方法
- java 读写properties
- Java多线程之Semaphore的介绍和使用
- Myeclipse的Ctrl+Shift+F格式化代码快捷键无效
- java生成和调用webservice
- List问题总结
- Java中HashMap的key的Hash值修改问题
- Java Maven web工程调试
- java简单的页面制作
- 对struts2.0的学习
- ScriptEngineManager for grovry
- Eclipse中基本的组件
- Process 'command 'Java\jdk\bin\java.exe'' finished with non-zero exit value