/**
*
*//**
* @author Administrator
*
*/
import static myutil.Print.*;
import java.util.*;
interface Cantoss{
void toss();
}interface CantossFactory {
Cantoss get();
}class Dice implements Cantoss{
private static final Random rand=new Random(48);
public void toss(){
printnb(rand.nextInt(6)+1+" ");
}
}class DiceFactory implements CantossFactory{
public Cantoss get(){
return new Dice();
}
}
public class Ex19 { /**
* @param args
*/
public static void playToss(CantossFactory ctf){
ctf.get().toss();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int ii=0;ii<10;ii++)
playToss(new DiceFactory()); //play 10 times
}}当我把private static final Random rand=new Random(48);语句去掉static后产出的数字就都是3,每次运行都是三,请问这是为什么呢,谢谢
*
*//**
* @author Administrator
*
*/
import static myutil.Print.*;
import java.util.*;
interface Cantoss{
void toss();
}interface CantossFactory {
Cantoss get();
}class Dice implements Cantoss{
private static final Random rand=new Random(48);
public void toss(){
printnb(rand.nextInt(6)+1+" ");
}
}class DiceFactory implements CantossFactory{
public Cantoss get(){
return new Dice();
}
}
public class Ex19 { /**
* @param args
*/
public static void playToss(CantossFactory ctf){
ctf.get().toss();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int ii=0;ii<10;ii++)
playToss(new DiceFactory()); //play 10 times
}}当我把private static final Random rand=new Random(48);语句去掉static后产出的数字就都是3,每次运行都是三,请问这是为什么呢,谢谢
解决方案 »
- 通过反射创建对象(前提,无法知道被创建对象构造函数情况)
- 有时候他会卡住在line = reader.readLine()) != null
- JOptionPane标题栏 不跟外观风格一致
- java串口通信小程序
- 求一个CODE,
- 为什么论坛的一些不错的贴子的网页保存不了呢?就是保存到24%的时候说无法保存网页.
- java如何得到某个thread是另一个的子thread或父thread,不是threadGroup哦
- int a=4 ;int b=14;float c=a/b c怎么是0.0 呀
- 请问有谁知道TOMCAT4可以支持多少并发用户访问?
- 请大侠们给个写FTP Server的思路
- 谁有Tidy.jar 文件
- Swing线程问题
如果去掉static 每个Dice 维护它自己的一个final的Random rand,这些rand的种子都是一样的,而且都是进行rand.nextInt(6),所以结果是相同的,都是3;
如果加上static那么所有的Dice都使用同一个Random rand,所以进行rand.nextInt(6),结果就是正确的了
Random rand=new Random();
public void toss(){
System.out.println(rand.nextInt(6)+1+" ");
}
}构造方法里放了个48
空的Random(),实际上插入了一个当前时间作为种子
import java.util.*;
public class Ex19 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Random r=new Random(48);
for(int ii=0;ii<20;ii++){
System.out.print (r.nextInt(6)+" ");
}
}}