main 函数里这么写:
int k=0;
int count=0;
for (int i=0;i<30000;i++){ Random rd=new Random();
k=rd.nextInt(3);
if (k==2) count++;}
out.print(count);或者:int k=0;
int count=0;
Random rd=new Random();
for (int i=0;i<30000;i++){
k=rd.nextInt(3);
if (k==2) count++;}
out.print(count);这两种写法第一种会得到毫无规律的结果,第二种则比较稳定
谁能告诉我原因?
int k=0;
int count=0;
for (int i=0;i<30000;i++){ Random rd=new Random();
k=rd.nextInt(3);
if (k==2) count++;}
out.print(count);或者:int k=0;
int count=0;
Random rd=new Random();
for (int i=0;i<30000;i++){
k=rd.nextInt(3);
if (k==2) count++;}
out.print(count);这两种写法第一种会得到毫无规律的结果,第二种则比较稳定
谁能告诉我原因?
java这点不爽,面向对象都不是什么时候都是必要的,new什么的。
哪位兄台有过这样的类似情况阿??
第二种方法只是new了一次,然后就根据一个48位的给定种子随机生成值
回帖不看贴呀new了Random,那么用来标定取值位置(暂且这么叫吧)的偏移量被归位了,而每次设置的种子又相同,取得的数据肯定相同第一种方法想得到随机数必须这样改
Random rd=new Random();
rd.setSeed(i);
k=rd.nextInt(3);
nextInt(int param)
这个param是上限标志,不是种子
决不是随机种子造成的先看看上面的帖子再说
凡是细节的东西都不要想当然。
我现在编写一个java静态类,它会不断的被调用,如果要想产生随机效果,看来要把random的变量设置为静态类成员了,而不能放在成员函数里作为临时变量了,对吧